Tartalomjegyzék

< wxPython

wxGlade

A wxGlade

A wxGlade egy vizuális tervező eszköz, wxWidgets, wxPython programok írásához. A wxGlade használható a szerkesztővel párhuzamosan. A generált kódba beleilleszt olyan jelölőket, amiből láthatjuk, hogy mi az amit ő szerkeszt és mit szerkeszthetünk mi.

Webhely:

Telepítés Windowson

Követelmény egy telepített Python3. Függőség telepítése:

pip install wxpython

A wxGlade csomagot letöltjük a weboldalról, kicsomagoljuk:

Telepítés Linuxon

wxPython függőségek telepítése:

apt install libgtk-3-dev

Csomagból:

apt install wxglade

Indítás

Linuxon

Windowson

Képernyőkép

wxGlade 0.8

wxGlade 0.9

Fejlesztői környezet

Ajánlás:

A PyCharm és a wxGlade nagyon jól kiegészítik egymást. A wxGlade felületein fejlesztés közben tudjuk a kódot szerkeszteni, amíg a kódot a PyCharm-ban írjuk.

Frame

Tegyünk fel egy keretet:

A Windows ikonsor, első ikonja.

Írjuk ki a forráskódot.

Legyen kijelölve a fanézetben a „Application”, majd kattintás:

A generált forráskód:

wxglade_out.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
# generated by wxGlade 0.9.6 on Mon Jul 27 15:01:08 2020
#
 
import wx
 
# begin wxGlade: dependencies
# end wxGlade
 
# begin wxGlade: extracode
# end wxGlade
 
 
class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.SetSize((400, 300))
 
        self.__set_properties()
        self.__do_layout()
        # end wxGlade
 
    def __set_properties(self):
        # begin wxGlade: MyFrame.__set_properties
        self.SetTitle("frame")
        # end wxGlade
 
    def __do_layout(self):
        # begin wxGlade: MyFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_1.Add((0, 0), 0, 0, 0)
        self.SetSizer(sizer_1)
        self.Layout()
        # end wxGlade
 
# end of class MyFrame
 
class MyApp(wx.App):
    def OnInit(self):
        self.frame = MyFrame(None, wx.ID_ANY, "")
        self.SetTopWindow(self.frame)
        self.frame.Show()
        return True
 
# end of class MyApp
 
if __name__ == "__main__":
    app = MyApp(0)
    app.MainLoop()

Azok a kódrészek, amikhez nem nyúlhatunk meg vannak jelölve így:

# begin wxGlade: Valami leírás
 
# end wxGlade:

Amit ezen kívül írunk az csak egy esetben marad meg.

A „Keep user code” legyen kipipálva. Ha ez ki van pipálva és generálunk egy új kódot a # begin wxGlade és # end wxGlade részen kívüli részt nem fogja törölni a generátor.

Ha ezt így beállítjuk a párhuzamosan tudunk dolgozni a wxGlade tervezővel és egy kódszerkesztővel, vagy fejlesztői környezettel (például PyCharm, Geany).

A generált app.py forráskódot ne szerkesszük, azt a wxGlade mindig újraírja.

Példa program kinézet

Az alábbiakban egy egyszerű alakalmazást látunk a következő osztályok felhasználásáva:

Slot

A Slot a wxGlade felület saját tárolója. A wxWidgets programozói könyvtár nem tartalmaz ilyen tárolót. A Slot jelzi, hogy oda tehetünk widgest komponenseket.

A Slotokban helyezhetünk el vezérlőket (gomb, beviteli doboz stb.). A Slotokat a méretezők (angolul Sizers) felett, jobb egérrel kattintva tudunk felvenni. A Slotnak mindig egy méretezőből kell kiindulnia. Ha felteszünk egy méretezőt, minimum 1 Slot-ja lesz. Ha több van, akkor a Slot felett jobb egér gombbal kattintva törölhető.

Ezek alapján, elmondhatjuk, hogy a slotokat sosem látjuk viszzont a forráskódban.

Sizer

A méretezők, angolul Sizer, egy-egy wxwidgets komponens, a vezérlők elhelyezését, méretezését szabályozzák.

A wxGlade-ben a feltehető méretezőkből kettő van:

Ezek ugyan megfelelnek két wxWidgets méretezőnek, de a „Properties” ablakban válthatunk a wxWidgets méretezői között. A „Properties” a következő méretezőket tartalmazza:

A feltehető komponensek közül, célszerű a grid jellegű méretezők esetén, a GridSizer választása, a többi esetben maradhat a BoxSizer.

Vezérlők

A másolás és a mozgatás, mindig Slotok között történhet. Mindig Slotból, slotba.

StaticText

A StaticText felirata (Label) a SetLabel() függvénnyel írható. A wxGlade tervező felületen be kell állítani az attribútumnak:

TextCtrl

Váltás jelszó stílus és normál stílus között:

self.settingsPanel.mariadbPasswordText.SetWindowStyle(wx.NORMAL)
self.settingsPanel.mariadbPasswordText.SetWindowStyle(wx.TE_PASSWORD)

ToggleButton

Állapot lekérdezése:

if event.GetEventObject().GetValue():
    # amit tenni akarunk

Külön osztályba rendezés

Nagyobb program esetén célszerű külön osztályba rendezni a programunk egyes komponenseit.

Ehhez nem kell mást tennünk, mint a vizuális szerkesztőben, a „Properties” ablakban, kikeressük a „Class” mezőt. Legyen például egy panel, ekkor ezen a helyen ezt látjuk: wxPanel. Ezt írjuk át arra a névre, amit szeretnénk látni.

A „Tree” ablakban pedig válasszuk ki az „Application” gyökércsomópontot, majd a „Properties” ablakban, keressük meg a „Separate file for each class” rádiógombot.

A „Properties” ablakban, az Output path mezőbe ilyenkor egy könyvtár legyen beállítva, fájl helyett. A könyvtárnak léteznie kell.

Az indítandó fájl ilyenkor az app.py.

A lépések sorra:

  1. Tree > Kivánt komopens
  2. Properties > Common > Class: Sajtnev
  3. Tree > Application
  4. Properties > (o) Separate file for each class
  5. Properties > Output path: ./src

Ezek után, ha kódot generálunk, akkor külön állományokba fog minden osztályt tenni, aminek a nevét átírtunk.

Megjegyzés: Ha MVC-vel dolgozunk, akkor ./src/views könyvtárat állítsunk be, vagy mentsük az src/views könyvtárba a wxGlade fájlt.

A program mindig a wx.App osztályból származtatott objektummal indul. Alapesetben, ez egy app.py nevű fájlban található.

Ha egy kontroller fájlból magunk szeretnénk indítani az alkalmazást, a következőket tegyük:

Git

Nézzük meg mit érdemes a .gitignore fájlba írni a wxGlade és a PyCharm használata mellett.

Legyen egy példa könyvtárszerkezet:

projekt01/
  |--.git/
  |--.idea/
  |--src/
  |--.gitignore
  `--program.wxg

Lehetséges .git ignore fájl:

.gitignore
.idea/
*~
__pycache__/

Amire ügyelni kell

Függvény és objektumnév egyezés

Ha van egy nyomógombunk aminek a neve calcButton, nem lehet ugyanezen a néven az eseménykezelő metódus. A wxGlade ezt nem ellenőrzi.

Használjuk eseménykezelőnek ilyenkor például:

OnClickCalcButton

Vagy Python elnevezési konvencióval:

on_click_calc_button

Ilyen esetben az előnézet kérése, hibába ütközik. A részletes nézetben, megmutatja a hibát.

Eseménykezelő függvény átnevezése

Ha átnevezzük az eseménykezelőt wxGlade felületen, akkor létrejön egy új függvény az újonnan beállított néven, de a régi függvény is megmarad.

wxStaticText igazítása wxGlade 0.9.x-ben

A Widget fülön ha beállítunk bármit, a szöveg balra igazítva marad, nem követi a beállítást.

A beállítás azonban működik. Ha előnézetet nézünk, akkor ott látszik.

Linkek