GTK上的IpAddrCtrl中断

2024-06-28 10:50:05 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的简单测试中,wx.lib.masked中有一个IpAddrCtrl元素:

import wx
import wx.lib.masked as masked

class MainWindow(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(500,500))

        self.ipaddr1 = masked.IpAddrCtrl(self, -1, style=wx.TE_PROCESS_TAB)

        self.grid_ip = wx.FlexGridSizer(cols=2, vgap=10, hgap=10)
        self.grid_ip.Add(self.ipaddr1, 0, wx.ALIGN_LEFT)    
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.grid_ip, 0, wx.ALIGN_LEFT | wx.ALL, border=5)
        self.SetSizer(self.sizer)    
        self.Bind(wx.EVT_TEXT, self.OnIpAddrChange, id=self.ipaddr1.GetId())    
        self.Show(True)

    def OnIpAddrChange(self, event):
        print(self.ipaddr1.GetAddress())
        print(self.ipaddr1.IsValid())

if __name__ == '__main__':
    app = wx.App(False)
    frame = MainWindow(None, "IpAddrCtrl sample")
    app.MainLoop()

在应用程序启动后,我尝试在我的IpAddrCtrl元素中插入正确的数值,但它会出现以下日志:

^{pr2}$

这里有一个screencast它实际上是如何工作的。在

wxPython项目中类似的demo也给我带来了同样的问题。在

我的环境:Debian Stretch with Python2.7.13,wxPython3.0.2和GTK22.24.31-2来自官方稳定存储库。在

有什么建议吗? 谢谢你的帮助!在


更新: 我尝试在Win32平台上使用相同的示例,IpAddrCtrl没有任何问题。经过一些调试后,我发现在尝试编辑所选文本区域时,EVT_TEXT事件调用中的GTK/Win版本之间存在差异。这会导致不必要的_OnTextChange事件处理程序调用,从而代理输入。 wxpythonwiki上的describedIpAddrCtrl基类源中的described奇怪的行为,但目前a不知道如何修复它。在


Tags: importselfip元素titlelibdefframe
1条回答
网友
1楼 · 发布于 2024-06-28 10:50:05

这是一个可怕的控制,据我所知,它根本无法直观地发挥作用。
您必须按back space,以清除该字段,因为您输入了ip地址的每个段,否则它会陷入完全混乱。
更换你的线路

ipaddr = self.FindWindowById(event.GetId())
print ipaddr
print ipaddr.IsValid()

^{pr2}$

显然,这是一个需要工作的函数,正如wxpython4中的broken。在

相关问题 更多 >