为什么我不能在班上访问变量。蟒蛇

时间:2014-06-20 21:01:37

标签: python wxpython

我在我的主课程中创建了一个面板。然后我想创建一个进入面板的按钮。我为名为panel_in_button的按钮创建了一个单独的类,并在其参数中设置main,希望我可以在我的主类中继承该面板,然后在我的panel_in_button类中使用它,但由于某些奇怪的原因我的按钮不会出现在我的运行程序。程序运行正常,但除此之外。请帮忙。这是我得到的错误,但我不认为它与我无法访问面板有任何关系。

警告(来自警告模块):   文件“C:\ Python27 \ GUI practice.py”,第19行     app = wx.PySimpleApp()#This运行程序 wxPyDeprecationWarning:使用不推荐使用的类PySimpleApp。

import wx

class main(wx.Frame):
    def __init__(self,parent,id):
        wx.Frame.__init__(self,parent,id, "My window", size=(300, 200))
        panel=wx.Panel(self)

class panel_in_button(main):
    def __init__(self):
        button = wx.Button(main.panel, label="exit",pos=(130,10), size=(60, 60))
        self.Bind(wx.EVT_BUTTON, self.closebutton, button)
        self.Bind(wx.EVT_CLOSE, self.closewindow)

    def closebutton(self, event):
       self.Close(True)

    def closewindow(self, event):
        self.Destroy()

if __name__=="__main__":
    app=wx.PySimpleApp() #This runs the program
    frame=main(parent=None, id=-1)#Displays the program
    frame.Show()
    app.MainLoop()

1 个答案:

答案 0 :(得分:0)

你无法以这种方式编写代码。 main 是一个类,而不是类的实例。你不应该直接调用一个类的方法。相反,您需要实例化它,然后调用您的对象的方法。不在此代码中的哪个位置实例化 panel_in_button 。无论如何,我不建议用这种方式编程。这是一个清理版本:

import wx

class main(wx.Frame):
    def __init__(self,parent,id):
        wx.Frame.__init__(self,parent,id, "My window", size=(300, 200))
        panel=wx.Panel(self)

        button = wx.Button(panel, label="exit",pos=(130,10), size=(60, 60))
        self.Bind(wx.EVT_BUTTON, self.closebutton, button)
        self.Bind(wx.EVT_CLOSE, self.closewindow)

    def closebutton(self, event):
        self.Close(True)

    def closewindow(self, event):
        self.Destroy()

if __name__=="__main__":
    app=wx.App(False) #This runs the program
    frame=main(parent=None, id=-1)#Displays the program
    frame.Show()
    app.MainLoop()

这将两个类合并为一个。我还将对 wx.PySimpleApp 的引用替换为不推荐使用的引用。我建议你看一下sizer而不是绝对定位。 Sizer绝对值得学习。