Прабыўшы некаторы час на стварэнне графічнага інтэрфейсу выкарыстаннем Tkinter і пакласці яго будзе даволі лёгка, але расчараваныя тым, як звязаны мой код і GUI было, я вырашыў зазірнуць у стварэнні графічнага інтэрфейсу з выкарыстаннем іншага інструментара. Агледзеўшы з наладамі, пакуль я спыніўся на выкарыстанні PyGTK і Glade
Таму я вырашыў Пры выкарыстанні гэтых двух тэхналогій, паколькі яны з'яўляюцца крос-платформавы і выкарыстання GLADE задавальняе маё жаданне асобных код формы GUI.
Калі вы ніколі не чулі пра Глейд перш, гэта "Карыстацкі інтэрфейс Builder для GTK + і GNOME". Ён генеруе XML-файлы, якія апісваюць жаданае GUI.
Я дазволю PyGTK сайце апісаць тое, што PyGTK з'яўляецца:
PyGTK прадастаўляе зручныя абгорткі для GTK + бібліятэка для выкарыстання ў праграмах Python, клапоцячыся аб многіх з сумныя падрабязнасці, такія як кіраванне памяццю і тыпаў. У спалучэнні з PyORBit і Gnome-Python, ён можа быць выкарыстаны для напісання поўнафункцыянальную Gnome прыкладанняў.
Такім чынам, паехалі, я пішу гэта на мой толькі што ўсталяванай сістэмы Debian. Калі вы працуеце ў Debian, або Debian дыстрыбутыў на базе атрымання PyGTK і Glade даволі просты:
APT-атрымаць ўстаноўку Python-gtk2 Python-glade2
Зараз давайце створым наш першы просты графічны інтэрфейс, гэта тое, што вам будзе сустрэта з пры першым запуску GLADE:
Што нам трэба зрабіць, гэта націснуць "Акно" кнопку на паляне палітру для стварэння нашай базы акна. Тады мы можам змяніць ўласцівасці акна ў вокны уласцівасцяў:
Мы называем наша акно MainWindow і мы ўсталюем назва будзе "Hello World... Зноў!".
Калі вы прывыклі выкарыстоўваць інтэграваны GUI Builder, напрыклад, Visual Studio, выкарыстоўваючы паляны можа адчуваць сябе крыху дзіўна першыя некалькі разоў. Тым больш, што вы на самай справе не месца элементаў кіравання ў любым месцы на экране, а не вы "ўпакаваць" іх. Як ні дзіўна (прынамсі для мяне) на самай справе здаецца, гэта спосаб найбольш GUI будаўнікі працуюць і прыкладанняў, такіх як Visual Studio фактычна няцотныя.
У любым выпадку назад у падручніку, першае, што мы збіраемся зрабіць, гэта дадаць цэтлік сказаць карыстальніка націснуць на кнопку (вядома, мы маглі б проста паставіць гэты тэкст на кнопку, але колькі задавальнення толькі адзін віджэт?). Так як GTK выкарыстоўваць кантэйнеры для ўпакоўкі віджэтаў Першае, што нам трэба зрабіць, гэта дадаць кантэйнера. Мы збіраемся размясціць над кожнай клавішай таму мы будзем выкарыстоўваць вертыкальныя скрынка з двума шэрагамі. Каб дадаць вертыкальныя скрынкі, проста пстрыкніце на ім у Глейд паддонаў, а затым націсніце на нашым галоўным акне. Маленькі дыялог будзе падысці і спытаць, колькі радкоў вы хочаце, мы хочам, два ў гэтым выпадку.
Наступнае, што мы будзем рабіць гэта дадаць цэтлік, націснуўшы на этыкетцы кнопку на паляне паддонаў, а затым націсніце на першую радок у кантэйнер, які мы толькі што стварылі. Мы будзем трымаць імя па змаўчанні (Label1), але мы будзем мяняць тэкст, які будзе: "Калі ласка, націсніце на кнопку!". Змяненне тэксту выконваецца ў акне Уласцівасці Паляна, які, калі вы не заўважылі да цяперашняга часу, паказвае, і дазваляе рэдагаваць ўласцівасці выбранага віджэту.
Наступнае, што мы будзем рабіць гэта дадаць кнопку ў тым жа шляху, што мы дадалі віджэт Label акрамя мы дадамо яго ў другім шэрагу. Мы будзем называць кнопку btnHelloWorld, і паставіў яго лэйбл, каб быць "ANTI-Тэст!"
Зараз неабходна ўсталяваць нашы варыянты праекту, я буду называць гэты праект "pyhelloworld" і захаваць яго ў сваіх праектах/PyHelloWorld тэчку.
Заўвага: Не забудзьцеся ўсталяваць бачныя варыянт для MainWindow Так, на ўкладцы "Агульныя" акна, а таксама галоўнае акно не будзе відаць! Гэта асабліва важна, калі вы выкарыстоўваеце glade3!
Вось яно што, вы ўбачыце ў тэчцы PyHelloWorld, што два файла былі створаны, адзін файл паляне праекта і. Паляне пашырэнне, а іншы нашай паляне GUI XML-файл з пашырэннем. Gladep.
Цяпер нам трэба стварыць Python праграму, якая будзе нагрузка паляне файл і адкрыць яго. Такім чынам, у той жа тэчцы, я збіраюся стварыць файл з імем PyHelloWorld.py.

Зараз першае, што мы будзем павінны зрабіць, гэта імпартаваць ўсе бібліятэкі, якія нам патрэбныя для нашага праекта:
#!/usr/bin/env python import sys try: import pygtk pygtk.require("2.0") except: pass try: import gtk import gtk.glade except: sys.exit(1)
Наступнае, што мы павінны зрабіць, гэта стварыць наш асноўны клас, я буду называць яго HellowWorldGTK. Мы будзем выкарыстоўваць __init__ функцыі для загрузкі нашай паляне файл:
Клас HellowWorldGTK: "" "Гэта Hello World GTK дадатак" "" def __init__(self): #Set the Glade file self.gladefile = "pyhelloworld.glade" self.wTree = gtk.glade.XML(self.gladefile) #Get the Main Window, and connect the "destroy" event self.window = self.wTree.get_widget("MainWindow") if (self.window): self.window.connect("destroy", gtk.main_quit)
Першае, што мы робім (пасля вызначэння класа), гэта паказаць паляне файл, які мы збіраемся выкарыстаць і ствараць gtk.glade.XML аб'екта з дапамогай нашай паляне файл. Вось апісанне аб'екта, зробленых з pyGTK2 спасылкі:
Гэты аб'ект ўяўляе сабой "асобнікі" з апісання інтэрфейсу XML. Калі адзін з гэтых аб'ектаў ствараецца, файл XML для чытання, і інтэрфейс ствараецца. Gtk.glade.XML аб'ект затым дае інтэрфейс для доступу да віджэтаў ў інтэрфейс, імёны ўскладзеных на іх у апісанні XML.
Gtk.glade.XML аб'екта таксама можа быць выкарыстаны для падлучэння апрацоўшчыкаў імя сігналаў у апісанні. Libglade таксама забяспечвае інтэрфейс, які можна знайсці імёны апрацоўшчык сігналу ў табліцы сімвалаў праграмы і аўтаматычна падключацца як многія апрацоўшчыкі да як можна такім чынам.
Так што мы робім, калі мы ствараем наш gtk.glade.XML аб'екта Стварэнне і загрузка нашага асноўнага інтэрфейсу.
Наступнае, што мы ідзем, гэта атрымаць экзэмпляр нашага галоўнага акна і звязацца "знішчыць" падзея з get.main_quit () функцыю. У асноўным гэта сыходзіць наша дадатак, калі галоўнае акно закрытая. У адваротным выпадку прыкладанне будзе працягваць працаваць, калі галоўнае акно зачынена (які мы, відавочна, не хочуць).
Вось менавіта для нашага HellowWorldGTK класа, наступная рэч, што мы павінны зрабіць, гэта стварыць экзэмпляр нашага класа, а затым пачаць GTK асноўны цыкл:
if __name__ == "__main__": hwg = HellowWorldGTK() gtk.main()
Вось-вось, даволі лёгка да гэтага часу, калі вы запусціце гэты файл вам будзе сустрэта з нашай маленькай акно GTK, што не робіць нічога, акрамя яшчэ кінуць правільна, калі вы зачыніце акно.

Наступным крокам з'яўляецца падключэнне падзеі націску кнопкі, каб функцыі. Для гэтага нам неабходна будзе выкарыстоўваць Паляна зноў змяніць наш інтэрфейс.
У галоўным акне мы павінны выбраць нашу кнопку аб'ект, а затым у акне уласцівасцяў выберыце "Сігналы" на ўкладцы. Там мы будзем дадаваць новы сігнал, націснуўшы на сігнал кнопку агляду (...) і выбраўшы "націснуў". Гэта створыць апрацоўшчык называецца "on_btnHelloWorld_clicked" па змаўчанні. Мы маглі б змяніць назву гэтага апрацоўшчыка, калі мы хацелі, але на дадзены момант па змаўчанні з'яўляецца дастаткова добрым.

Вось менавіта для працы на паляне, што зараз нам трэба зрабіць, гэта падлучыць, што падзеі на што-то ў нашым кодзе. На шчасце, гэта даволі лёгка зрабіць, выкарыстоўваючы gtk.glade.XML.signal_autoconnect функцыі.
#Create our dictionay and connect it dic = { "on_btnHelloWorld_clicked" : self.btnHelloWorld_clicked, "on_MainWindow_destroy" : gtk.main_quit } self.wTree.signal_autoconnect(dic)
Асноўным слоўнік ствараецца з дапамогай назва падзеі, і функцыя для падлучэння к. Вы можаце бачыць, што мы звязваем падзея націску нашу кнопку з новай функцыяй, і што мы падключым "on_MainWindow_destroy" падзея з gtk.main_quit () функцыю, гэта ў асноўным з'яўляецца заменай для нашага кода, які раней выйсці з праграмы, калі акно Закрытая:. Увага! Калі вы хочаце выкарыстаць гэтую версію слоўніка вы павінны пайсці і дадаць знішчыць падзеі ў галоўнае акно на паляне.
Заўвага: Так як гэта было хапаць людзей, якіх я дадаў некалькі малюнкаў, каб зрабіць яго больш відавочна, што падзея для падлучэння да:


Наступнае, што трэба зрабіць, гэта стварыць наш btnHelloWorld_clicked функцыі класа HellowWorldGTK:
Def btnHelloWorld_clicked (я, віджэт): Print "Hello World!"
Вельмі проста! Цяпер, калі мы запускаем яго, і націсніце на кнопку "Click Me!" Мы бачым кнопку "Hello World!", Напісанай для нашай каманднага радка.
Вось менавіта для гэтага ўроку, але пакуль мне вельмі падабаецца, што я бачу працу з PyGTK і Glade. Вось поўны зыходны тэкст:
#!/usr/bin/env python import sys try: import pygtk pygtk.require("2.0") except: pass try: import gtk import gtk.glade except: sys.exit(1) class HellowWorldGTK: """This is an Hello World GTK application""" def __init__(self): #Set the Glade file self.gladefile = "pyhelloworld.glade" self.wTree = gtk.glade.XML(self.gladefile) #Create our dictionay and connect it dic = { "on_btnHelloWorld_clicked" : self.btnHelloWorld_clicked, "on_MainWindow_destroy" : gtk.main_quit } self.wTree.signal_autoconnect(dic) def btnHelloWorld_clicked(self, widget): print "Hello World!" if __name__ == "__main__": hwg = HellowWorldGTK() gtk.main()