Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface wxPython-框架未按编程方式打开_User Interface_Wxpython_Python 2.6 - Fatal编程技术网

User interface wxPython-框架未按编程方式打开

User interface wxPython-框架未按编程方式打开,user-interface,wxpython,python-2.6,User Interface,Wxpython,Python 2.6,当我运行下面的程序时,我得到的只是一个小窗口和一个小文本框,根据程序,它应该是一个大窗口、大文本框和两个按钮 import wx class FirstFrame(wx.Frame): def __init__(self,parent,id,title): wx.Frame.__init__(self,parent,id,'PIZZA', size=(400,400)) self.sizer = wx.FlexGridSizer(2,2,5,5)

当我运行下面的程序时,我得到的只是一个小窗口和一个小文本框,根据程序,它应该是一个大窗口、大文本框和两个按钮

import wx

class FirstFrame(wx.Frame):
    def __init__(self,parent,id,title):
        wx.Frame.__init__(self,parent,id,'PIZZA', size=(400,400))
        self.sizer = wx.FlexGridSizer(2,2,5,5)
        panel=wx.Panel(self,-1)
        self.button1 = wx.Button(panel,id=-1,label='Click Me!', size=(20,20))
        self.textbox = wx.TextCtrl(panel,id=-1,size=(50,50))
        self.button2 = wx.Button(panel,-1,'Click Me Too!',size=(20,20))
        #trying to use the boxer...
        self.sizer.Add(self.textbox)
        self.sizer.Add(self.button1)
        self.sizer.Add(self.button2)
        self.SetSizerAndFit(self.sizer)

class MyGame(wx.App):
    def OnInit(self):
        frame=FirstFrame(None,-1,"wx")
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

app=MyGame()
app.MainLoop()

您可能希望将_init___中的最后一行更改为以下内容:

panel.SetSizerAndFit(self.sizer)
以下是上下文中的代码:

import wx

class FirstFrame(wx.Frame):
    def __init__(self,parent,id,title):
        wx.Frame.__init__(self,parent,id,'PIZZA', size=(400,400))
        self.sizer = wx.FlexGridSizer(2,2,5,5)
        panel=wx.Panel(self,-1)
        self.button1 = wx.Button(panel,id=-1,label='Click Me!', size=(20,20))
        self.textbox = wx.TextCtrl(panel,id=-1,size=(50,50))
        self.button2 = wx.Button(panel,-1,'Click Me Too!',size=(20,20))
        #trying to use the boxer...
        self.sizer.Add(self.textbox)
        self.sizer.Add(self.button1)
        self.sizer.Add(self.button2)
        panel.SetSizerAndFit(self.sizer)

class MyGame(wx.App):
    def OnInit(self):
        frame=FirstFrame(None,-1,"wx")
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

app=MyGame()
app.MainLoop()

就我个人而言,我不使用Fit或SetSizerAndIt,因为这类奇怪的问题。

如果您使用大小调整器,则不应使用固定大小,让大小调整器完成其工作:

因此,请从按钮和文本控件中删除“size=”,并将init中的最后一行更改为“panel.SetSizerself.sizer”,您的sizer控制面板的子对象,因此不要将其设置为框架。由于面板是框架中唯一可以工作的东西,否则您将需要另一个用于框架的施胶器

我是Size_控件的粉丝,因此这里介绍了如何使用Size_控件,它们可以自动处理sizer的所有内容,但如果需要,它们仍然可以为您提供控制,请查看wxPython演示和/或以下网址的文档:


我终于找到了答案: 显然,有时当类具有绘制背景或在帧上设置位置的命令时,会发生这种情况,而不使用大小调整器。 大约10周后,当整个项目完成时,它自行解决了问题

import wx
import wx.lib.sized_controls as sc

class FirstFrame(sc.SizedFrame):
    def __init__(self,parent,id,title):
        super(FirstFrame, self).__init__(parent, id, 'PIZZA')
        pane = self.GetContentsPane()
        self.button1 = wx.Button(pane,id=-1,label='Click Me!')
        self.textbox = wx.TextCtrl(pane,id=-1)
        self.button2 = wx.Button(pane,-1,'Click Me Too!')

class MyGame(wx.App):
    def OnInit(self):
        frame=FirstFrame(None,-1,"wx")
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

app=MyGame()
app.MainLoop()