【问题标题】:WxPython[TextCtrl] : The way of locate the cursor to end of text using TextCtrl function.WxPython[TextCtrl] : 使用 TextCtrl 函数将光标定位到文本末尾的方式。
【发布时间】:2016-09-07 17:55:28
【问题描述】:

很高兴认识你。我有一些关于使用 wxpython 的问题。那就是我无法控制 TextCtrl 函数的光标。那是我的 wxpython 代码。

#!/usr/bin/python  
import wx

def get_main_screen_text():
    text = "\n       [Anyfusion Monitoring System]\n\n"
    return text

class Tom(wx.Dialog):
    def __init__(self, parent, id, title):
        wx.Dialog.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(400, 420))
        panel = wx.Panel(self, -1)
        vbox = wx.BoxSizer(wx.HORIZONTAL)
        vbox1 = wx.BoxSizer(wx.VERTICAL)
        vbox2 = wx.BoxSizer(wx.VERTICAL)    
        self.message = get_main_screen_text()

        self.write = wx.TextCtrl(panel, -1, style=wx.TE_MULTILINE, value=self.message)
        System_Checkup = wx.Button(panel, 1, label='System_Checkup')
        Open_the_Web = wx.Button(panel, 1, label=' Open_the_Web ') 
        Help_Desk = wx.Button(panel, 1, label=' Help_Desk ') 
        Exit = wx.Button(panel, 1, label=' Exit ')

        vbox1.Add(self.write, 1, wx.EXPAND | wx.TOP | wx.RIGHT | wx.LEFT | wx.BOTTOM, 15)
        vbox2.Add(System_Checkup, 0, wx.TOP | wx.TOP  | wx.RIGHT, 15)
        vbox2.Add(Open_the_Web, 0, wx.TOP | wx.RIGHT, 15)
        vbox2.Add(Help_Desk, 0, wx.TOP, 230)
        vbox2.Add(Exit, 0, wx.TOP | wx.RIGHT, 15)        
        vbox.Add(vbox1, 1, wx.EXPAND)
        vbox.Add(vbox2, 0, wx.TOP)
        self.Bind(wx.EVT_BUTTON, self.EventHandler, id=1)
        panel.SetSizer(vbox)
        self.Centre()

    def EventHandler(self, event):
        b=event.GetEventObject().GetLabel()
        if b.endswith('System_Checkup'):
            self.message = self.message+"\nABC"
            self.write.SetValue(self.message)
            self.write.SetEditable(False)
            self.write.SetScrollPos(wx.VERTICAL,0)
            self.write.SetInsertionPoint(0)
            self.write.Refresh()            

class MyApp(wx.App):
    def OnInit(self):
        frame = Tom(None, -1, 'Tom')
        frame.ShowModal()
        frame.Destroy()
        return True

if __name__ == "__main__":
    app = MyApp()
    app.MainLoop()

我想将光标定位到文本末尾。但是我的程序不起作用。下面是我的 wxpython 程序的捕获。

下一个捕获是 wxpython 程序的预期结果。

非常感谢。我想尽快解决这个问题..谢谢..

【问题讨论】:

    标签: python cursor wxpython textctrl


    【解决方案1】:

    使用SetInsertionPointEnd

    #!/usr/bin/python  
    import wx
    
    def get_main_screen_text():
        text = "\n       [Anyfusion Monitoring System]\n\n"
        return text
    
    class Tom(wx.Dialog):
        def __init__(self, parent, id, title):
            wx.Dialog.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(400, 420))
            panel = wx.Panel(self, -1)
            vbox = wx.BoxSizer(wx.HORIZONTAL)
            vbox1 = wx.BoxSizer(wx.VERTICAL)
            vbox2 = wx.BoxSizer(wx.VERTICAL)    
            self.message = get_main_screen_text()
    
            self.write = wx.TextCtrl(panel, -1, style=wx.TE_MULTILINE, value=self.message)
            System_Checkup = wx.Button(panel, 1, label='System_Checkup')
            Open_the_Web = wx.Button(panel, 1, label=' Open_the_Web ') 
            Help_Desk = wx.Button(panel, 1, label=' Help_Desk ') 
            Exit = wx.Button(panel, 1, label=' Exit ')
    
            vbox1.Add(self.write, 1, wx.EXPAND | wx.TOP | wx.RIGHT | wx.LEFT | wx.BOTTOM, 15)
            vbox2.Add(System_Checkup, 0, wx.TOP | wx.TOP  | wx.RIGHT, 15)
            vbox2.Add(Open_the_Web, 0, wx.TOP | wx.RIGHT, 15)
            vbox2.Add(Help_Desk, 0, wx.TOP, 230)
            vbox2.Add(Exit, 0, wx.TOP | wx.RIGHT, 15)        
            vbox.Add(vbox1, 1, wx.EXPAND)
            vbox.Add(vbox2, 0, wx.TOP)
            self.Bind(wx.EVT_BUTTON, self.EventHandler, id=1)
            panel.SetSizer(vbox)
            self.Centre()
    
        def EventHandler(self, event):
            b=event.GetEventObject().GetLabel()
            if b.endswith('System_Checkup'):
                self.message = self.message+"\nABC"
                self.write.SetValue(self.message)
                self.write.SetEditable(False)
                self.write.SetScrollPos(wx.VERTICAL,0)
                self.write.SetFocus()
                self.write.SetInsertionPointEnd() 
                self.write.Refresh()            
    
    class MyApp(wx.App):
        def OnInit(self):
            frame = Tom(None, -1, 'Tom')
            frame.ShowModal()
            frame.Destroy()
            return True
    
    if __name__ == "__main__":
        app = MyApp()
        app.MainLoop()
    

    【讨论】:

    • 谢谢。我解决了一个问题。每个功能都完美运行。
    猜你喜欢
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2013-05-12
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    相关资源
    最近更新 更多