添加变量以显示wxpython框架中的任何文本

添加变量以显示wxpython框架中的任何文本,python,python-3.x,wxpython,Python,Python 3.x,Wxpython,所以,我在学校学习python,作为我当前项目的一部分,我希望能够在屏幕上制作小的“弹出窗口”。我选择用wxpython来做这个,但我遇到了一个问题。现在我找不到添加变量的方法,所以我可以打印任何我想要的内容。我尝试在类和init函数中添加一个额外的变量,但都出现了错误。我不习惯上课,也不习惯上课的方式,我真的很想得到一些帮助。以下是我正在使用的代码: import wx class HelloFrame(wx.Frame): def __init__(self, *args, **k

所以,我在学校学习python,作为我当前项目的一部分,我希望能够在屏幕上制作小的“弹出窗口”。我选择用wxpython来做这个,但我遇到了一个问题。现在我找不到添加变量的方法,所以我可以打印任何我想要的内容。我尝试在类和init函数中添加一个额外的变量,但都出现了错误。我不习惯上课,也不习惯上课的方式,我真的很想得到一些帮助。以下是我正在使用的代码:

import wx

class HelloFrame(wx.Frame):
    def __init__(self, *args, **kw):
        super(HelloFrame, self).__init__(*args, **kw)

        pnl = wx.Panel(self)
        st = wx.StaticText(pnl, label = "Betting")
        font = st.GetFont()
        font.PointSize += 10
        font = font.Bold()
        st.SetFont(font)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(st, wx.SizerFlags().Border(wx.TOP|wx.LEFT, 25))
        pnl.SetSizer(sizer)

        self.makeMenuBar()
        self.CreateStatusBar()
        self.SetStatusText("Welcome to wxPython!")

    def makeMenuBar(self):
        fileMenu = wx.Menu()
        helloItem = fileMenu.Append(-1, "&Hello...\tCtrl-H",
        "Help string shown in status bar for this menu item")
        fileMenu.AppendSeparator()
        exitItem = fileMenu.Append(wx.ID_EXIT)

        helpMenu = wx.Menu()
        aboutItem = helpMenu.Append(wx.ID_ABOUT)

        menuBar = wx.MenuBar()
        menuBar.Append(fileMenu, "&file")
        menuBar.Append(helpMenu, "&help")

        self.SetMenuBar(menuBar)

        self.Bind(wx.EVT_MENU, self.OnHello, helloItem)
        self.Bind(wx.EVT_MENU, self.OnExit, exitItem)
        self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)

    def OnExit(self, event):
        self.Close(True)

    def OnHello(self, event):
        wx.MessageBox("Hello again from wxPython")

    def OnAbout(self, event):
        wx.MessageBox("This is a wxPython Hello World Sample", "About Hello World 2", wx.OK|wx.ICON_INFORMATION)

if __name__ == '__main__':
    x = number()
    app = wx.App()
    frm = HelloFrame(None, title='Betting predictions')
    frm.Show()
    app.MainLoop()
现在我希望能够将任何内容作为标签输入到
st=wx.StaticText(pnl,label=“Betting”)

而不是仅仅“打赌”,让它显示我想要的任何文本,但为了我的生命,我无法理解它。这是我项目中相对较小的一部分,因为我已经完成并有一些额外的时间,但我真的很想让它工作。

您可以通过调用静态文本上的SetLabel成员函数来更改标签。现在您正在创建st作为函数init的局部变量。您需要将其作为一个实例变量,如下所示:

class HelloFrame(wx.Frame):
    def __init__(self, *args, **kw):
        super(HelloFrame, self).__init__(*args, **kw)

        pnl = wx.Panel(self)
        self.st = wx.StaticText(pnl, label = "Betting")
        [...]
        # then everywhere you use it, use self.st to access it like this:
        self.st.SetFont(font)
如果要更改标签,例如在选择菜单项后:

def OnHello(self, event):
    wx.MessageBox("Hello again from wxPython")
    self.st.SetLabel("Changed label")
或者,如果要在构造窗口时设置文本,可以将参数传递给函数(构造函数):


可以通过对静态文本调用SetLabel成员函数来更改标签。现在您正在创建st作为函数init的局部变量。您需要将其作为一个实例变量,如下所示:

class HelloFrame(wx.Frame):
    def __init__(self, *args, **kw):
        super(HelloFrame, self).__init__(*args, **kw)

        pnl = wx.Panel(self)
        self.st = wx.StaticText(pnl, label = "Betting")
        [...]
        # then everywhere you use it, use self.st to access it like this:
        self.st.SetFont(font)
如果要更改标签,例如在选择菜单项后:

def OnHello(self, event):
    wx.MessageBox("Hello again from wxPython")
    self.st.SetLabel("Changed label")
或者,如果要在构造窗口时设置文本,可以将参数传递给函数(构造函数):


@Petr Blahos的
实例
变量付诸实施。
请注意,
self.st.SetLabel()
是在
MessageBox
之前应用的,或者在取消消息之前,标签不会更新
self.mycount
也声明为实例变量

import wx

class HelloFrame(wx.Frame):
    def __init__(self, *args, **kw):
        super(HelloFrame, self).__init__(*args, **kw)

        pnl = wx.Panel(self)
        self.st = wx.StaticText(pnl, label = "Betting")
        font = self.st.GetFont()
        font.PointSize += 10
        font = font.Bold()
        self.st.SetFont(font)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.st, wx.SizerFlags().Border(wx.TOP|wx.LEFT, 25))
        pnl.SetSizer(sizer)

        self.makeMenuBar()
        self.CreateStatusBar()
        self.SetStatusText("Welcome to wxPython!")
        self.mycount = 0
    # Show Frame and initially call OnHello (use None to compensate for a lack of event)
        self.Show()
        self.OnHello(None)

    def makeMenuBar(self):
        fileMenu = wx.Menu()
        helloItem = fileMenu.Append(-1, "&Hello...\tCtrl-H",
        "Help string shown in status bar for this menu item")
        fileMenu.AppendSeparator()
        exitItem = fileMenu.Append(wx.ID_EXIT)

        helpMenu = wx.Menu()
        aboutItem = helpMenu.Append(wx.ID_ABOUT)

        menuBar = wx.MenuBar()
        menuBar.Append(fileMenu, "&file")
        menuBar.Append(helpMenu, "&help")

        self.SetMenuBar(menuBar)

        self.Bind(wx.EVT_MENU, self.OnHello, helloItem)
        self.Bind(wx.EVT_MENU, self.OnExit, exitItem)
        self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)

    def OnExit(self, event):
        self.Close(True)

    def OnHello(self, event):
        self.mycount += 1
        mystring = "Betting Display No: " + str(self.mycount)
        self.st.SetLabel(mystring)
        wx.MessageBox("Hello again from wxPython")

    def OnAbout(self, event):
        wx.MessageBox("This is a wxPython Hello World Sample", "About Hello World 2", wx.OK|wx.ICON_INFORMATION)

if __name__ == '__main__':
    app = wx.App()
    frm = HelloFrame(None, title='Betting predictions')
    #frm.Show()
    app.MainLoop()


注意:您始终可以创建一条
self.message
,该消息可以在函数外部设置,但在函数内部使用。这比尝试lambda函数更简单。

@Petr Blahos的
实例
变量已付诸实施。
请注意,
self.st.SetLabel()
是在
MessageBox
之前应用的,或者在取消消息之前,标签不会更新
self.mycount
也声明为实例变量

import wx

class HelloFrame(wx.Frame):
    def __init__(self, *args, **kw):
        super(HelloFrame, self).__init__(*args, **kw)

        pnl = wx.Panel(self)
        self.st = wx.StaticText(pnl, label = "Betting")
        font = self.st.GetFont()
        font.PointSize += 10
        font = font.Bold()
        self.st.SetFont(font)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.st, wx.SizerFlags().Border(wx.TOP|wx.LEFT, 25))
        pnl.SetSizer(sizer)

        self.makeMenuBar()
        self.CreateStatusBar()
        self.SetStatusText("Welcome to wxPython!")
        self.mycount = 0
    # Show Frame and initially call OnHello (use None to compensate for a lack of event)
        self.Show()
        self.OnHello(None)

    def makeMenuBar(self):
        fileMenu = wx.Menu()
        helloItem = fileMenu.Append(-1, "&Hello...\tCtrl-H",
        "Help string shown in status bar for this menu item")
        fileMenu.AppendSeparator()
        exitItem = fileMenu.Append(wx.ID_EXIT)

        helpMenu = wx.Menu()
        aboutItem = helpMenu.Append(wx.ID_ABOUT)

        menuBar = wx.MenuBar()
        menuBar.Append(fileMenu, "&file")
        menuBar.Append(helpMenu, "&help")

        self.SetMenuBar(menuBar)

        self.Bind(wx.EVT_MENU, self.OnHello, helloItem)
        self.Bind(wx.EVT_MENU, self.OnExit, exitItem)
        self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)

    def OnExit(self, event):
        self.Close(True)

    def OnHello(self, event):
        self.mycount += 1
        mystring = "Betting Display No: " + str(self.mycount)
        self.st.SetLabel(mystring)
        wx.MessageBox("Hello again from wxPython")

    def OnAbout(self, event):
        wx.MessageBox("This is a wxPython Hello World Sample", "About Hello World 2", wx.OK|wx.ICON_INFORMATION)

if __name__ == '__main__':
    app = wx.App()
    frm = HelloFrame(None, title='Betting predictions')
    #frm.Show()
    app.MainLoop()


注意:您始终可以创建一条
self.message
,该消息可以在函数外部设置,但在函数内部使用。这比尝试lambda函数更简单。

很抱歉,在尝试使用代码时,我遇到了这个错误:frm=HelloFrame(无,信息字符串,title='Betting predictions')super(HelloFrame,self)。\uuuuu init\uuuu(*args,**kw)TypeError:Frame():参数与任何重载调用不匹配:重载1:参数太多重载2:参数1具有意外的类型“str”Oops!固定的。谢谢。很抱歉,我在尝试使用以下代码时遇到此错误:frm=HelloFrame(无,信息字符串,title='Betting predictions')super(HelloFrame,self)。\uuuu init\uuu(*args,**kw)TypeError:Frame():参数与任何重载调用都不匹配:重载1:参数过多重载2:参数1具有意外的“str”类型!固定的。谢谢。当点击窗口中的按钮时,这确实可以改变标签,但我希望能够从一开始就改变它。我尝试过这样做:def OnHello(self,event,label):self.mycount+=1#mystring=“博彩显示编号:”+str(self.mycount)self.st.SetLabel(label)wx.MessageBox(“来自wxPython的再次你好”)但是我不知道在哪里调用这个函数并输入一个标签,因为我从来没有调用过它,只是frm=HelloFrame(None,title='botting predictions'),当点击窗口中的按钮时,它确实可以更改标签,我希望能够从一开始就改变它。我尝试过这样做:def OnHello(self,event,label):self.mycount+=1#mystring=“博彩显示编号:”+str(self.mycount)self.st.SetLabel(label)wx.MessageBox(“来自wxPython的再次你好”)但是我不知道在哪里调用这个函数并输入标签,因为我从来没有调用过它,只是frm=HelloFrame(None,title='Betting predictions')