我的代码中的wxPython StaticText问题

时间:2014-03-20 18:41:08

标签: python wxpython

我的wxPython代码中存在一个问题,静态文本导致其他一切看似消失。

注意:这是我第一次使用wxPython,而且我在编程方面非常新手,所以请尽量给出明确的解释。谢谢!

import wx

APP_EXIT = 1
pos1 = (150, 200)

class scoutingSet(wx.Frame):

    def __init__(self, *args, **kwargs):
        super(scoutingSet, self).__init__(*args, **kwargs)

        self.InitUI()

    def InitUI(self):

         ############################################################
         # MENUBARS AND MENUITEMS
         menuBar = wx.MenuBar()
         fileMenu = wx.Menu()
         fileMenu2 = wx.Menu()

         openSheet = wx.MenuItem(fileMenu, wx.ID_ANY, 'Open')
         openSheet.SetBitmap(wx.Bitmap('open.png'))
         fileMenu.AppendItem(openSheet)
         fileMenu.AppendSeparator()

         saveSheet = wx.MenuItem(fileMenu, wx.ID_ANY, 'Save')
         saveSheet.SetBitmap(wx.Bitmap('save.png'))
         fileMenu.AppendItem(saveSheet)
         fileMenu.AppendSeparator()

         quitSheet = wx.MenuItem(fileMenu, APP_EXIT, 'Quit')
         quitSheet.SetBitmap(wx.Bitmap('close.png'))
         fileMenu.AppendItem(quitSheet)
         self.Bind(wx.EVT_MENU, self.OnQuit, id=APP_EXIT)

         fileMenu2.Append(100, '&About')
         self.Bind(wx.EVT_MENU, self.aboutBox, id=100)

         menuBar.Append(fileMenu, 'File')
         menuBar.Append(fileMenu2, 'Information')
         self.SetMenuBar(menuBar)

         ############################################################
         # BUTTONS AND CONTROL

         panel = wx.Panel(self)
         closebutton = wx.Button(panel, label = 'Close\nClose', pos = (20, 30))

         closebutton.Bind(wx.EVT_BUTTON, self.OnQuit)

         ############################################################
         # STATIC TEXTS


         ############################################################
         # TEXT CONTROL BOXES


         wx.TextCtrl(panel, pos = pos1, size = (50, 50))
         wx.TextCtrl(panel, pos = (300, 400), size = (50, 50))

         ############################################################
         # SETTINGS

         self.stuff(self)

         self.Maximize()
         self.SetTitle('Scouting Sheet')
         self.Centre()
         self.Show(True)

         ############################################################

         # Quitting

    def OnQuit(self, e):
        self.Close()

    # Info in 

    def aboutBox(self, e):
        desc = """This is the SOTAbots 2014 scouting sheet for the FRC 2014 game Aerial Assist"""

        infoInAbout = wx.AboutDialogInfo()
        infoInAbout.SetIcon(wx.Icon('scouting.png', wx.BITMAP_TYPE_PNG))
        infoInAbout.SetName('Scouting Sheet')
        infoInAbout.SetVersion('1.0')
        infoInAbout.SetDescription(desc)
        infoInAbout.AddDeveloper('Franklin Lyon\nLucas Grillos')
        wx.AboutBox(infoInAbout)

    def stuff(self, e):
        textpnl = wx.StaticText(self,-1 , label='Watermark', pos=(20, 30))
        textpnl.SetForegroundColour('white')
        textpnl.SetBackgroundColour('blue')

def main():
    ex = wx.App()
    scoutingSet(None)
    ex.MainLoop()

if __name__ == '__main__':
    main()

注意:我将静态文本放在一个函数中,但即使在InitUI函数内部,问题仍然存在。它与显示的StaticText有关,因为如果我注释掉调用,一切都显示正常。

提前致谢。

2 个答案:

答案 0 :(得分:0)

我认为wx.StaticText是自我(wx.Frame)而不是面板,尽管面板上有wx.TextCtrl。如果你在面板上放置wx.StaticText会怎么样?

另外,我认为你需要一个Sizer(例如wx.BoxSizer)来管理布局。您可以在http://zetcode.com/wxpython/layout/找到有关wx.BoxSizer的教程。在initUI中,我将执行以下操作:

 txtctrl1 = wx.TextCtrl(panel, pos = pos1, size = (50, 50))
 txtctrl2 = wx.TextCtrl(panel, pos = (300, 400), size = (50, 50))
 textpnl = wx.StaticText(panel,-1 , label='Watermark', pos=(20, 30))

 vbox = wx.BoxSizer(wx.VERTICAL)
 vbox.add(txtctrl1, 1, wx.EXPAND | wx.ALL, 5)
 vbox.add(txtctrl2, 1, wx.EXPAND | wx.ALL, 5)
 vbox.add(textpnl , 1, wx.EXPAND | wx.ALL, 5)
 vbox.add(closebutton, 0, wx.EXPAND | wx.ALL, 5)

 panel.SetSizer(vbox)

我希望它有所帮助。

答案 1 :(得分:0)

您的GUI组件布局不正确。我建议您使用sizers进行正确的布局。 BoxSizer很简单。这是关于Layout management的一个很好的教程。

当您提供panel的大小时,您的代码将有效。使用此行panel = wx.Panel(self, -1, size=(800,800))现在您将看到所有组件!我还改变了静态文本的位置,因为它与按钮重叠。

请注意,您应该不鼓励在代码中使用panel之类的名称。而是使用myPanelpanelA

之类的东西

工作代码:在Windows 8上测试,wxPython v3.0

import wx

APP_EXIT = 1
pos1 = (150, 200)

class scoutingSet(wx.Frame):

    def __init__(self, *args, **kwargs):
        super(scoutingSet, self).__init__(*args, **kwargs)

        self.InitUI()

    def InitUI(self):

         ############################################################
         # MENUBARS AND MENUITEMS
         menuBar = wx.MenuBar()
         fileMenu = wx.Menu()
         fileMenu2 = wx.Menu()

         openSheet = wx.MenuItem(fileMenu, wx.ID_ANY, 'Open')
         openSheet.SetBitmap(wx.Bitmap('open.png'))
         fileMenu.AppendItem(openSheet)
         fileMenu.AppendSeparator()

         saveSheet = wx.MenuItem(fileMenu, wx.ID_ANY, 'Save')
         saveSheet.SetBitmap(wx.Bitmap('save.png'))
         fileMenu.AppendItem(saveSheet)
         fileMenu.AppendSeparator()

         quitSheet = wx.MenuItem(fileMenu, APP_EXIT, 'Quit')
         quitSheet.SetBitmap(wx.Bitmap('close.png'))
         fileMenu.AppendItem(quitSheet)
         self.Bind(wx.EVT_MENU, self.OnQuit, id=APP_EXIT)

         fileMenu2.Append(100, '&About')
         self.Bind(wx.EVT_MENU, self.aboutBox, id=100)

         menuBar.Append(fileMenu, 'File')
         menuBar.Append(fileMenu2, 'Information')
         self.SetMenuBar(menuBar)

         ############################################################
         # BUTTONS AND CONTROL

         panel = wx.Panel(self, -1, size=(800,800))
         closebutton = wx.Button(panel, label = 'Close\nClose', pos = (20, 30))

         closebutton.Bind(wx.EVT_BUTTON, self.OnQuit)

         ############################################################
         # STATIC TEXTS


         ############################################################
         # TEXT CONTROL BOXES


         wx.TextCtrl(panel, pos = pos1, size = (50, 50))
         wx.TextCtrl(panel, pos = (300, 400), size = (50, 50))

         ############################################################
         # SETTINGS

         self.stuff(self)

         self.Maximize()
         self.SetTitle('Scouting Sheet')
         self.Centre()
         self.Show(True)

         ############################################################

         # Quitting

    def OnQuit(self, e):
        self.Close()

    # Info in 

    def aboutBox(self, e):
        desc = """This is the SOTAbots 2014 scouting sheet for the FRC 2014 game Aerial Assist"""

        infoInAbout = wx.AboutDialogInfo()
        infoInAbout.SetIcon(wx.Icon('scouting.png', wx.BITMAP_TYPE_PNG))
        infoInAbout.SetName('Scouting Sheet')
        infoInAbout.SetVersion('1.0')
        infoInAbout.SetDescription(desc)
        infoInAbout.AddDeveloper('Franklin Lyon\nLucas Grillos')
        wx.AboutBox(infoInAbout)

    def stuff(self, e):
        textpnl = wx.StaticText(self,-1 , label='Watermark', pos=(100, 100))
        textpnl.SetForegroundColour('white')
        textpnl.SetBackgroundColour('blue')

def main():
    ex = wx.App()
    scoutingSet(None)
    ex.MainLoop()

if __name__ == '__main__':
    main()

我希望这很有帮助。