已解决:
感谢下面 Aya 的回答,我现在知道问题是由第 18 行的 self.panel = wx.Panel(self, -1)
引起的。我创建了一个面板,但没有在其上附加任何内容。原始问题描述仍如下,供引用。
我的 Google-fu 让我失望了。我正在构建文本编辑器,您可以在这里找到它,用 Python 和 wxPython 编写:
https://github.com/joshsaintjacque/py-ed/blob/master/pyed.py
我遇到的问题是:当我打开一个大于 TextCtrl 中可视区域的文本文件(此时内置的唯一功能)时,滚动条将保持禁用状态,直到窗口重新打开为止。大小,然后就可以正常工作了。
我知道调整窗口大小的行为正在运行一些命令,我忽略了将其包含在我的 OpenFile 函数中(或者可能在 init 中),但我无法弄清楚什么。 任何人有任何可以引导我走向正确方向的想法将不胜感激。
谢谢!
最佳答案
+1 包含完整源代码的链接 - 使其更容易测试。
我无法在 Win32 上的 wxPython 2.8.12 上重现您所描述的错误,但是在运行您的代码时,我发现在 pyed 上创建了一个看似无关的
第 18 行...wx.Panel
对象。 py
self.panel = wx.Panel(self, -1)
...这似乎干扰了程序的正确运行。注释掉该行后,它似乎工作正常。
<小时/>我注意到的其他一些事情:第 56 行...
self.SetTitle("PyEd - Editing ... " + filename)
...应该放在前面的 if block 中,否则如果用户单击 wx.FileDialog
上的“取消”,以及第 16 行,您将收到错误。 .
wx.Frame.__init__(self, parent, id, 'PyEd', (-1, -1), wx.Size(640, 480))
...如果您使用关键字参数而不是位置参数...
wx.Frame.__init__(self, parent=parent, id=id, title='PyEd', size=wx.Size(640, 480))
...您不必费心重新指定窗口位置的默认值,这也稍微安全一些,以防 wxPython 开发人员决定在未来版本中更改默认值。
您还可以分解常量值,并可选择创建 wx.Size
对象以将该行减少到...
wx.Frame.__init__(self, parent=None, title='PyEd', size=(640, 480))
<小时/>
最后,关于 ID:在大多数情况下,您可能会发现它们没什么用处。它们派上用场的地方是您需要许多类似的控件,并且让它们由单个事件处理函数处理更有意义。
考虑这个例子...
def create_buttons(parent):
parent.button1 = wx.Button(label='Button 1')
parent.button2 = wx.Button(label='Button 2')
parent.button3 = wx.Button(label='Button 3')
parent.button1.Bind(wx.EVT_BUTTON, on_button_1)
parent.button2.Bind(wx.EVT_BUTTON, on_button_2)
parent.button3.Bind(wx.EVT_BUTTON, on_button_3)
def on_button_1(event):
print 'You clicked button 1'
def on_button_2(event):
print 'You clicked button 2'
def on_button_3(event):
print 'You clicked button 3'
...这很好,但如果您需要,比如说,100 个按钮,您可能更喜欢这样实现...
def create_buttons(parent):
parent.buttons = [wx.Button(id=i, label='Button %d' % i) for i in range(100)]
parent.Bind(wx.EVT_BUTTON, on_button)
def on_button(event):
button_id = event.GetId()
print 'You clicked button %d' % button_id
哦,使用 id
作为变量名时要小心,因为它也是 Python 内置函数名。
关于python - TextCtrl 滚动条在调整窗口大小之前不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15931507/