python - TextCtrl 滚动条在调整窗口大小之前不可用

标签 python wxpython

已解决: 感谢下面 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 上创建了一个看似无关的 wx.Panel 对象。 py 第 18 行...

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/

相关文章:

当代码直接使用 gcc 运行时,Python C 版本为 : "undefined symbol" errror,

python - wxPython:如何使用 wx.sizer 类之一指定特定列的宽度?

python - 使用 wxPython 在 Python 中的文本上鼠标事件

python - 直接运行 python GUI 脚本 (wxpython)

python - wxpython 没有 'adv'

python - 如何确定 wx GLCanvas 允许的最大 WX_GL_DEPTH_SIZE?

python - 在 python 中别名方法名称的最佳方法是什么?

python - 此表达式在 Python 中为真 : {}. keys().insert(0, "") == None。为什么?

python - 如何使用 Python 检测图形的转折点

python - 迭代 Pandas 列并在每次迭代中计算新列