【问题标题】:Userinput as variables using wxPython使用 wxPython 将用户输入作为变量
【发布时间】:2020-09-09 07:25:43
【问题描述】:

我有以下代码用于使用 wxPython 的小型 GUI。现在我想将用户输入写入inputoneinputtwo 等变量中,以便以后使用。我不知道该怎么做。

   import wx
    
    
    class Utform(wx.Frame):
    
        def __init__(self):
    
            wx.Frame.__init__(self, None, wx.ID_ANY, title='Tool')
    
            
            self.panel = wx.Panel(self, wx.ID_ANY)
    
            title = wx.StaticText(self.panel, wx.ID_ANY, 'Upgrade')
    
            labelone = wx.StaticText(self.panel, wx.ID_ANY, 'inputone', size=(100, 20))
            inputtxtone = wx.TextCtrl(self.panel, wx.ID_ANY, '', size=(200, 20))
    
            labeltwo = wx.StaticText(self.panel, wx.ID_ANY, 'inputtwo', size=(100, 20))
            inputtxttwo = wx.TextCtrl(self.panel, wx.ID_ANY, 'YYYY-MM-DD', size=(200, 20))
    
            labelthree = wx.StaticText(self.panel, wx.ID_ANY, 'inputthree', size=(100, 20))
            inputtxtthree = wx.TextCtrl(self.panel, wx.ID_ANY, '', size=(200, 20))
    
            labelfour = wx.StaticText(self.panel, wx.ID_ANY, 'inputfour', size=(100, 20))
            inputtxtfour = wx.TextCtrl(self.panel, wx.ID_ANY, '', size=(200, 20))
    
            labelfive = wx.StaticText(self.panel, wx.ID_ANY, 'inputfive', size=(100, 20))
            inputtxtfive = wx.TextCtrl(self.panel, wx.ID_ANY, '', size=(200, 20))
    
            okbtn = wx.Button(self.panel, wx.ID_ANY, 'OK')
            cancelbtn = wx.Button(self.panel, wx.ID_ANY, 'Cancel')
            self.Bind(wx.EVT_BUTTON, self.onok, okbtn)
            self.Bind(wx.EVT_BUTTON, self.oncancel, cancelbtn)
    
            
            topsizer = wx.BoxSizer(wx.VERTICAL)
            titlesizer = wx.BoxSizer(wx.VERTICAL)
            inputfoursizer = wx.BoxSizer(wx.HORIZONTAL)
            inputfivesizer = wx.BoxSizer(wx.HORIZONTAL)
            inputonesizer = wx.BoxSizer(wx.HORIZONTAL)
            inputtwosizer = wx.BoxSizer(wx.HORIZONTAL)
            inputthreesizer = wx.BoxSizer(wx.HORIZONTAL)
    
            btnsizer = wx.BoxSizer(wx.HORIZONTAL)
    
            titlesizer.Add(title, 0, wx.ALL, 5)
    
            inputonesizer.Add(labelone, 0, wx.ALL, 5)
            inputonesizer.Add(inputtxtone, 0, wx.ALL | wx.EXPAND, 5)
    
            inputtwosizer.Add(labeltwo, 0, wx.ALL, 5)
            inputtwosizer.Add(inputtxttwo, 0, wx.ALL | wx.EXPAND, 5)
    
            inputthreesizer.Add(labelthree, 0, wx.ALL, 5)
            inputthreesizer.Add(inputtxtthree, 0, wx.ALL | wx.EXPAND, 5)
    
            inputfoursizer.Add(labelfour, 0, wx.ALL, 5)
            inputfoursizer.Add(inputtxtfour, 0, wx.ALL | wx.EXPAND, 5)
    
            inputfivesizer.Add(labelfive, 0, wx.ALL, 5)
            inputfivesizer.Add(inputtxtfive, 0, wx.ALL | wx.EXPAND, 5)
    
            btnsizer.Add(okbtn, 1, wx.ALL, 5)
            btnsizer.Add(cancelbtn, 1, wx.ALL, 5)
    
            topsizer.Add(titlesizer, 0, wx.CENTER)
            topsizer.Add(wx.StaticLine(self.panel, ), 0, wx.ALL | wx.EXPAND, 5)
    
            topsizer.Add(inputfoursizer, 0, wx.ALL | wx.EXPAND, 5)
            topsizer.Add(inputfivesizer, 0, wx.ALL | wx.EXPAND, 5)
            topsizer.Add(inputonesizer, 0, wx.ALL | wx.EXPAND, 5)
            topsizer.Add(inputtwosizer, 0, wx.ALL | wx.EXPAND, 5)
            topsizer.Add(inputthreesizer, 0, wx.ALL | wx.EXPAND, 5)
            topsizer.Add(btnsizer, 0, wx.ALL | wx.EXPAND, 5)
    
            self.panel.SetSizer(topsizer)
            topsizer.Fit(self)
    
            customerpath = os.path.abspath(".")
            self.CreateStatusBar()
            self.SetStatusText(customerpath)
    
        def onok(self, event):
            # MAKE UPGRADE
            customerpath = os.path.abspath(".")
            wx.MessageBox('OK')
            customerpath = os.path.abspath(".")
            print("path")
    
    if __name__ == '__main__':
        app = wx.PySimpleApp()
        frame = Utform().Show()
        app.MainLoop()
    app.MainLoop()

【问题讨论】:

  • 这能回答你的问题吗? Getting String from A TextCtrl Box
  • 可以说它们已经是变量了。您可以通过GetValue() 访问它们。因此,inputtxtone.GetValue() 将返回该变量中的任何内容。一个问题是您将它们声明为local 变量,以便能够在另一个函数中轻松访问它们,将它们声明为instance 变量,即self.inputtxtone,然后在您的事件函数中为该输入myvariableone = self.inputtxtone.GetValue()。您可以将其拖出事件对象,但这是另一回事。

标签: python user-interface wxpython


【解决方案1】:

除了我的评论之外,请使用此代码来看看其中的一些是如何工作的。
您为TextCtrl 回调触发器选择的event 很重要,style 也是如此。

import wx
import os

class Utform(wx.Frame):

    def __init__(self):

        wx.Frame.__init__(self, None, wx.ID_ANY, title='Tool')

        
        self.panel = wx.Panel(self, wx.ID_ANY)

        title = wx.StaticText(self.panel, wx.ID_ANY, 'Upgrade')

        labelone = wx.StaticText(self.panel, wx.ID_ANY, 'inputone', size=(100, 20))
        self.inputtxtone = wx.TextCtrl(self.panel, wx.ID_ANY, '', size=(200, 20))

        labeltwo = wx.StaticText(self.panel, wx.ID_ANY, 'inputtwo', size=(100, 20))
        inputtxttwo = wx.TextCtrl(self.panel, wx.ID_ANY, 'YYYY-MM-DD', size=(200, 20))

        labelthree = wx.StaticText(self.panel, wx.ID_ANY, 'inputthree', size=(100, 20))
        self.inputtxtthree = wx.TextCtrl(self.panel, wx.ID_ANY, '', style=wx.TE_PROCESS_ENTER, size=(200, 20))
            
        okbtn = wx.Button(self.panel, wx.ID_ANY, 'OK')
        cancelbtn = wx.Button(self.panel, wx.ID_ANY, 'Cancel')

        self.inputtxtone.Bind(wx.EVT_KILL_FOCUS, self.input1)
        inputtxttwo.Bind(wx.EVT_TEXT, self.input2)
        self.inputtxtthree.Bind(wx.EVT_TEXT_ENTER, self.input3)

        self.Bind(wx.EVT_BUTTON, self.onok, okbtn)
        self.Bind(wx.EVT_BUTTON, self.oncancel, cancelbtn)

        
        topsizer = wx.BoxSizer(wx.VERTICAL)
        titlesizer = wx.BoxSizer(wx.VERTICAL)
        inputonesizer = wx.BoxSizer(wx.HORIZONTAL)
        inputtwosizer = wx.BoxSizer(wx.HORIZONTAL)
        inputthreesizer = wx.BoxSizer(wx.HORIZONTAL)

        btnsizer = wx.BoxSizer(wx.HORIZONTAL)

        titlesizer.Add(title, 0, wx.ALL, 5)

        inputonesizer.Add(labelone, 0, wx.ALL, 5)
        inputonesizer.Add(self.inputtxtone, 0, wx.ALL | wx.EXPAND, 5)

        inputtwosizer.Add(labeltwo, 0, wx.ALL, 5)
        inputtwosizer.Add(inputtxttwo, 0, wx.ALL | wx.EXPAND, 5)

        inputthreesizer.Add(labelthree, 0, wx.ALL, 5)
        inputthreesizer.Add(self.inputtxtthree, 0, wx.ALL | wx.EXPAND, 5)
        
        btnsizer.Add(okbtn, 1, wx.ALL, 5)
        btnsizer.Add(cancelbtn, 1, wx.ALL, 5)

        topsizer.Add(titlesizer, 0, wx.CENTER)
        topsizer.Add(wx.StaticLine(self.panel, ), 0, wx.ALL | wx.EXPAND, 5)

        topsizer.Add(inputonesizer, 0, wx.ALL | wx.EXPAND, 5)
        topsizer.Add(inputtwosizer, 0, wx.ALL | wx.EXPAND, 5)
        topsizer.Add(inputthreesizer, 0, wx.ALL | wx.EXPAND, 5)
        topsizer.Add(btnsizer, 0, wx.ALL | wx.EXPAND, 5)

        self.panel.SetSizer(topsizer)

        customerpath = os.path.abspath(".")
        self.CreateStatusBar()
        self.SetStatusText(customerpath)

    def input1(self, event):
        print(self.inputtxtone.GetValue())
        
    def input2(self, event):
        obj = event.GetEventObject()
        print(obj.GetValue())
        
    def input3(self, event):
        print(self.inputtxtthree.GetValue())
        
    def oncancel(self, event):
        print("cancelled")
        
    def onok(self, event):
        # MAKE UPGRADE
        customerpath = os.path.abspath(".")
        wx.MessageBox('OK')
        customerpath = os.path.abspath(".")
        print("path", customerpath)

if __name__ == '__main__':
    app = wx.App()
    frame = Utform().Show()
    app.MainLoop()

【讨论】:

  • 是的!有用。谢谢你的例子。现在我必须分离单个部分并将其集成到现有脚本中。非常感谢!
  • @0x01_PH 欢迎使用 StackOverflow。
  • :D 是的,我知道,但你的代码示例帮助我理解了它的工作原理!非常感谢 - 今天学到了很多(这也是 stackoverflow ;))
猜你喜欢
  • 2022-12-06
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
相关资源
最近更新 更多