我的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有关,因为如果我注释掉调用,一切都显示正常。
提前致谢。
答案 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
之类的名称。而是使用myPanel
或panelA
等
工作代码:在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()
我希望这很有帮助。