我遇到了wxpython的问题。当我运行以下代码时,它将以小的形式显示列表框(它将仅显示大约10x10的列表框)。我不知道为什么会这样,网上没有太多资源来帮助我。如果我不添加任何按钮,列表框将正确显示。请原谅我,如果这是一个简单的解决方案,但我真的很难过。如果你不明白我的问题是什么,请运行以下代码,你会看到。
import wx
class MyFrame(wx.Frame):
"""make a frame, inherits wx.Frame"""
def __init__(self,parent,id):
# create a frame, no parent, default to wxID_ANY
wx.Frame.__init__(self, parent, id, 'Testing',
pos=(300, 150), size=(600, 500))
panel = wx.Panel(self)
sampleList = ['dsakdsko0', '1', '2', '3', '4']
listBox = wx.ListBox(panel, -1, (4,3), (100, 60), sampleList, wx.LB_SINGLE)
listBox.SetSelection(3)
self.SetBackgroundColour("white")
wx.Button(self, 1, 'Close', (50, 130))
wx.Button(self, 2, 'Random Move', (150, 130), (110, -1))
self.Bind(wx.EVT_BUTTON, self.OnClose, id=1)
self.Bind(wx.EVT_BUTTON, self.OnRandomMove, id=2)
# show the frame
self.Show(True)
#menu bar
status=self.CreateStatusBar()
menubar=wx.MenuBar()
first=wx.Menu()
second=wx.Menu()
first.Append(wx.NewId(),"New","Creates A new file")
first.Append(wx.NewId(),"ADID","Yo")
menubar.Append(first,"File")
menubar.Append(second,"Edit")
self.SetMenuBar(menubar)
def OnClose(self, event):
self.Close(True)
def OnRandomMove(self, event):
screensize = wx.GetDisplaySize()
randx = random.randrange(0, screensize.x - APP_SIZE_X)
randy = random.randrange(0, screensize.y - APP_SIZE_Y)
self.Move((randx, randy))
if __name__=='__main__':
application = wx.PySimpleApp()
frame=MyFrame(parent=None,id=-1)
frame.Show()
# start the event loop
application.MainLoop()
非常感谢你。
答案 0 :(得分:0)
问题涉及父母。您的按钮的父级是框架,而列表框的父级是面板。也可以将面板作为父级按钮给出,问题就会消失。顺便说一下,分配自己的ID号通常不是一个好主意,特别是那些可能会被使用的ID号。但如果你真的想,那么请遵循Robin Dunn的wxPython书中的这些说明:
“您可以通过调用全局函数wx.RegisterId()来确保wxPython不在应用程序的其他位置使用您的显式ID。为了防止程序重复wxPython ID,你应该避免在全局常量wx.ID_LOWEST和wx.ID_HIGHEST之间使用ID号。“
编辑:以下是一个类别的例子:
改变这个:
wx.Button(self, 1, 'Close', (50, 130))
wx.Button(self, 2, 'Random Move', (150, 130), (110, -1))
到此:
wx.Button(panel, 1, 'Close', (50, 130))
wx.Button(panel, 2, 'Random Move', (150, 130), (110, -1))
然后注册您的ID:
wx.RegisterId(1)
wx.RegisterId(2)
就个人而言,我只想创建这样的按钮:
closeBtn = wx.Button(panel, wx.ID_ANY, 'Close', (50, 130))
self.Bind(wx.EVT_BUTTON, self.OnClose, closeBtn)
randomBtn = wx.Button(panel, wx.ID_ANY, 'Random Move', (150, 130), (110, -1))
self.Bind(wx.EVT_BUTTON, self.OnRandomMove, randomBtn)