【问题标题】:Python tkinter checkbutton value always equal to 0Python tkinter checkbutton 值始终等于 0
【发布时间】:2017-01-18 20:12:37
【问题描述】:

我将checkbutton 放在text 小部件上,但每次选择checkbutton 时,都会调用函数checkbutton_value,并返回0。

部分代码为:

def callback():

    file_name=askopenfilename()
    column_1rowname,column_name=draw_column(file_name)

    root = Tk()
    root.resizable(width=False,height=False)
    root.wm_title("Column")


    S = Scrollbar(root,orient="vertical")
    text=Text(root,width=15,height=10,yscrollcommand=S.set)
    S.config(command=text.yview)
    S.pack(side="right",fill="y")
    text.pack(side="left",fill="both",expand=True)

    #check the value of the checkbutton
    def checkbutton_value():

        if(var.get()):

            print 1
        else:

            print 0

    var=BooleanVar()
    chk = Checkbutton(root, text=column_1rowname[1], variable=var, command=checkbutton_value)
    text.window_create("end", window=chk)
    text.config(state=DISABLED)


errmsg='Error!'
Button(text='File Open',command=callback).pack(fill=X)


mainloop()

【问题讨论】:

  • 谢谢。我已经改了。
  • 这真的是你的真实代码吗?在回调中创建Tk 的实例肯定是个问题。
  • 是的。我的代码可以运行。但是当我选择复选按钮时它总是返回 0。

标签: python checkbox tkinter


【解决方案1】:

问题是您有多个根窗口。您应该只创建一个Tk 的实例,并且只调用一次mainloop。如果您需要其他窗口,请创建 Toplevel 的实例。

每个根窗口(及其所有子窗口,以及所有相关的StringVars 等)都会启动一个新的独立 tcl 解释器。与此窗口关联的小部件和变量不能在另一个 tcl 解释器中使用。在您的情况下,StringVar 与第一个根窗口相关联,但小部件与第二个相关联。你不能像那样在根窗口之间共享数据。

【讨论】:

  • 谢谢。这段代码的目的是:首先打开一个excel文件,然后选择列。
  • @wxd:你的代码的目的并不重要。你不能有两个根窗口。您的小部件位于第二个根窗口中,但您的变量属于第一个。您不能在两个根窗口之间共享数据。
  • 对更改代码结构有任何详细建议吗?我是新手。谢谢。
  • @wxd:我已经写了一个建议:如果您需要多个窗口,请使用Toplevel 而不是创建Tk 的新实例。
  • 谢谢。我会尽力理解的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2023-04-07
相关资源
最近更新 更多