【问题标题】:Setting label value from OptionMenu in tkinter从 tkinter 中的 OptionMenu 设置标签值
【发布时间】:2018-03-14 11:52:08
【问题描述】:

我想将标签值设置为当前选项菜单值的值。如果后者发生变化,我希望前者也发生变化。我的问题是这个 gui 元素是在单独的类中定义的(我希望它们像那样),但我不知道如何将它们连接在一起。如果没有类,我知道我可以使用OptionMenucommand 方法来设置Label 的值。但是将它们放入框架容器中我被卡住了。 这是我要解决的简单且有效的代码:

from tkinter import *
root = Tk()
opt=['Jan', 'Feb', 'March']

class MyOptMenu(Frame):
    def __init__(self, parent=None):
        Frame.__init__(self, parent)
        self.pack()
        self.var = StringVar(self)
        self.var.set(opt[0])
        self.om = OptionMenu(self, self.var, *opt)
        self.om.pack(side=TOP)
        self.var.trace('w', self.getValue)
   def getValue(self, *args):
        return(self.var.get())

class MyLabel(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.pack()
        self.labstring = StringVar(self)
        self.lab = Label(self, textvariable = self.labstring, bg='white')
        self.lab.pack(side=TOP)
        self.labstring.set('hello')

a = MyOptMenu(root)
b = MyLabel(root)
root.mainloop()

你能给我一些帮助吗?非常感谢。

【问题讨论】:

  • 最简单的方法是让您的标签具有与选项菜单相同的StringVar。你真的需要为每个人定义一个StringVar吗?
  • 嗯,其实这很聪明 :) 出于某种原因,我没有想到这一点。我进行了更改并且它有效。非常感谢。
  • @KiralySandor 如果您已解决问题,请提供答案。
  • @Nae,我添加了对我有用的解决方案的答案并添加了 cmets,以解释更改。

标签: python-3.x tkinter label optionmenu


【解决方案1】:

根据@j_4321 的建议,我在这里发布解决我的问题的解决方案。我在代码行之间的 cmets 中提供了解释。

from tkinter import *
root = Tk()
opt=['Jan', 'Feb', 'March']

var = StringVar(root)  # initialization of a common StringVar for both OptionMenu and Label widgets

class MyOptMenu(Frame):
    def __init__(self, parent=None):
        Frame.__init__(self, parent)
        self.pack()
        var.set(opt[0])  # give an initial value to the StringVar that will be displayed first on the OptionMenu
        self.om = OptionMenu(self, var, *opt)
        self.om.pack(side=TOP)
        var.trace('w', self.getValue)   # continuously trace the value of the selected items in the OptionMenu and update the var variable, using the function self.getValue
    def getValue(self, *args):
        return(var.get())  # return the current value of OptionMenu

class MyLabel(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.pack()
        self.lab = Label(self, textvariable = var, bg='white')  # use the same StringVar variable (var) as the OptionMenu. This allows changing the Label text instantaneously to the selected value of OptionMenu
        self.lab.pack(side=TOP)

a = MyOptMenu(root)
b = MyLabel(root)
root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2014-10-30
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    相关资源
    最近更新 更多