2012-02-27 61 views
1

我想用Python來創建GUI。我已經下載了wxPython並創建了一個「hello world」窗口。但是,我發現我的代碼與其他代碼示例有點不同。特別是,當其他例子想要創建一個GUI時,他們從wx庫繼承而我沒有,那麼我的類和其他類有什麼區別?繼承,Python和wxWidget

我的源代碼:從書中

import wx 
class Window(): 
    def init (self, parent, id, windowname): 
     mywindow = wx.Frame (parent, id, windowname) 
     mywindow.Show(True) 
     return True 

app = wx.App(False) 
wind = Window() 
wind.init(None, wx.ID_ANY, "windowname") 
t.oninit("Hello World" , "watch") 
app.MainLoop() 

源代碼示例:

import wx 
class App(wx.App): 
    def OnInit(self): 
     frame = wx.Frame(parent=None, title='Bare') 
     frame.Show() 
     return True 

app = App() 
app.MainLoop() 

回答

1

wx.App類有一個叫做OnInit()當應用程序被初始化時調用的方法。第二個代碼塊用自定義代碼覆蓋該方法,即顯示一個框架的代碼。

您的代碼不會這樣做,這可能是您遇到問題的原因。

1

稱它爲一個窗口並不是一個!

通過繼承wx類,你可以獲得他們所有的預先存在的功能 - 在這個例子中,App類繼承了所有的wx.App類的結構和行爲,也就是說它已經知道如何做很多事情如何啓動,如何處理輸入事件,如何在告知時關閉等)。

你從零開始的類不會繼承任何東西 - 除了你定義的東西外,它沒有任何邏輯,這不足以使它實際上「像」一個窗口一樣。

2

這是正確的方式來做到這一點:

import wx 
class Window(wx.Frame): 
    def __init__ (self, parent, id, windowname): 
     mywindow = wx.Frame (parent, id, windowname) 
     mywindow.Show(True) 


app = wx.App(False) 
wind = Window(None, -1, "windowname") 
app.MainLoop() 

正如其他人所說,命名類實例的「窗口」是指什麼。你必須從wx.Frame中繼承,才能做到這一點。事實上,我不會稱之爲「窗口」,因爲實際上有一個名爲「wx.Window」的較高級別的小部件,可能會在以後引起混淆。

你應該去通過zetcode wxPython的教程:http://zetcode.com/wxpython/也許檢查出一些在wxPython的演示,維基的例子或我的博客:http://www.blog.pythonlibrary.org/

您還應該添加一個wx.Panel實例作爲唯一的孩子的框架,使其看起來正確的所有系統,並啓用窗口小部件之間的選項卡。

+0

+1:爲了解釋並說明如何做到這一點 – tom10 2012-02-29 00:12:00