【问题标题】:Another Tkinter Checkbutton Not Working Problem另一个 Tkinter Checkbutton 不工作问题
【发布时间】:2020-07-23 07:12:32
【问题描述】:

我想弄清楚这一点而失去理智。

我的 Python3 Checkbutton 引用 IntVar() 不起作用。每当我在 IntVar 上调用 get() 时,即使选中/选中复选框,我总是得到 0。其他一切,例如。 StringVar,Entry 工作正常。

提前感谢您的帮助。

请看下面的配置。

def updateOrder():
    updateOrdertk = tk.Tk()
    updateOrdertk.title('UPDATE ORDER')
    updateOrdertklabela = tk.Label(updateOrdertk,fg="brown",text="Update Order by Order Ref.")
    updateOrdertklabela.pack()
    updateOrdertklabelb = tk.Label(updateOrdertk,fg="brown",text="Be careful updating.")
    updateOrdertklabelb.pack()
    updateOrdertklabelc = tk.Label(updateOrdertk,fg="brown",text="For Notes, indicate why Total Amount changed, eg. pid100 oos, pid200 wrong price.")
    updateOrdertklabelc.pack()
    #updateCanvas = Canvas(updatetk, bg = "cyan", height = 25, width = 300)

    updateOrdertkstartframe = Frame(updateOrdertk, relief=RAISED, borderwidth=1)
    updateOrdertkstartframe.pack(fill=X)
    updateOrdertklabelOrderref = tk.Label(updateOrdertkstartframe, text="ORDER REF:")
    updateOrdertklabelOrderref.pack(side=LEFT, padx=5, pady=5)
    updateOrdertkInputOrderref = tk.Entry(updateOrdertkstartframe)
    updateOrdertkInputOrderref.pack(fill=X, padx=5, expand=True)

    updateOrdertkChoicesordstatus = {'SUBMITTED', 'PROCESSING','IN-TRANSIT','DELIVERED-OK','DELIVERED-W-ISSUES','CANCELLED'}
    updateOrdertkChoicesordstatusvar = StringVar(updateOrdertk)
    updateOrdertkChoicesordstatusvar.set('SUBMITTED')
    updateOrdertkCheckordstatusvar = IntVar()

    
    updateOrdertkframe2 = Frame(updateOrdertk, relief=RAISED, borderwidth=1)
    updateOrdertkframe2.pack(fill=X)
    updateOrdertklabelordstatus = tk.Label(updateOrdertkframe2, text="ORDER STATUS:")
    updateOrdertklabelordstatus.pack(side=LEFT, padx=5, pady=5)
    updateOrdertkCheckordstatusCbutton = tk.Checkbutton(updateOrdertkframe2,text="Update",variable=updateOrdertkCheckordstatusvar)
    updateOrdertkCheckordstatusCbutton.pack(side=RIGHT, padx=5, pady=5)
    ordstatuslistmenu = OptionMenu(updateOrdertkframe2, updateOrdertkChoicesordstatusvar, *updateOrdertkChoicesordstatus)
    ordstatuslistmenu.pack(side=RIGHT,padx=5, pady=5)
    

    updateOrdertkChecktotamtvar = IntVar()

    updateOrdertkframe1 = Frame(updateOrdertk, relief=RAISED, borderwidth=1)
    updateOrdertkframe1.pack(fill=X)
    updateOrdertklabeladjtotal = tk.Label(updateOrdertkframe1, text="NEW TOTAL AMOUNT:")
    updateOrdertklabeladjtotal.pack(side=LEFT, padx=5, pady=5)
    updateOrdertkChecktotamtCbutton = tk.Checkbutton(updateOrdertkframe1,text="Update",variable=updateOrdertkChecktotamtvar)
    updateOrdertkChecktotamtCbutton.pack(side=RIGHT, padx=5, pady=5)
    updateOrdertkInputadjtotal = tk.Entry(updateOrdertkframe1)
    updateOrdertkInputadjtotal.pack(fill=X, padx=5, expand=True)
    

    updateOrdertkChoicesadjtype = {'ADD TO ORIGINAL AMOUNT', 'DEDUCT FROM ORIGINAL AMOUNT'}
    updateOrdertkChoicesadjtypevar = StringVar(updateOrdertk)
    updateOrdertkChoicesadjtypevar.set('DEDUCT FROM ORIGINAL AMOUNT')
    updateOrdertkCheckadjtypevar = IntVar()

    updateOrdertkframe3 = Frame(updateOrdertk, relief=RAISED, borderwidth=1)
    updateOrdertkframe3.pack(fill=X)
    updateOrdertklabeladjtype = tk.Label(updateOrdertkframe3, text="ADJUSTMENT TYPE:")
    updateOrdertklabeladjtype.pack(side=LEFT, padx=5, pady=5)
    updateOrdertkCheckadjtypeCbutton = tk.Checkbutton(updateOrdertkframe3,text="Update",variable=updateOrdertkCheckadjtypevar)
    updateOrdertkCheckadjtypeCbutton.pack(side=RIGHT, padx=5, pady=5)
    adjtypelistmenu = OptionMenu(updateOrdertkframe3, updateOrdertkChoicesadjtypevar, *updateOrdertkChoicesadjtype)
    adjtypelistmenu.pack(side=RIGHT,padx=5, pady=5)
    
    
    updateOrdertkChecknotesvar = IntVar()

    updateOrdertkframe4 = Frame(updateOrdertk, relief=RAISED, borderwidth=1)
    updateOrdertkframe4.pack(fill=BOTH)
    updateOrdertklabelnotes = tk.Label(updateOrdertkframe4, text="NOTES:")
    updateOrdertklabelnotes.pack(side=LEFT, padx=5, pady=5)
    updateOrdertkInputnotes = tk.Entry(updateOrdertkframe4)
    updateOrdertkInputnotes.pack(fill=BOTH, padx=5, expand=True)
    updateOrdertkChecknotesCbutton = tk.Checkbutton(updateOrdertkframe4,text="Update",variable=updateOrdertkChecknotesvar)
    updateOrdertkChecknotesCbutton.pack(side=LEFT, padx=5, pady=5)

    updateOrdertkendframe = Frame(updateOrdertk, relief=RAISED, borderwidth=1)
    updateOrdertkendframe.pack(fill=BOTH, expand=True)
    updateOrdertkGobutton = tk.Button(updateOrdertkendframe,text="UPDATE ORDER",fg="green", command= lambda: goUpdateOrder(updateOrdertkInputOrderref.get(),updateOrdertkChoicesordstatusvar.get(),updateOrdertkCheckordstatusvar.get(),
                                                                                                                        updateOrdertkInputadjtotal.get(),updateOrdertkChecktotamtvar.get(),updateOrdertkChoicesadjtypevar.get(),
                                                                                                                        updateOrdertkCheckadjtypevar.get(),updateOrdertkInputnotes.get(),updateOrdertkChecknotesvar.get()))
    updateOrdertkClosebutton = tk.Button(updateOrdertkendframe,text="CLOSE",fg="red", command=updateOrdertk.destroy)
    updateOrdertkClosebutton.pack(side=RIGHT,padx=5,pady=5)
    updateOrdertkGobutton.pack(side=RIGHT)

【问题讨论】:

  • 请将您的代码缩减为minimal reproducible example。如果问题是关于单个检查按钮的行为,我认为我们只需要一个检查按钮,不需要一堆其他小部件。
  • 另外,您正在函数内创建Tk 的实例。在这个函数之外你还有Tk 的实例吗?您不应创建多个 Tk 实例。
  • 嗨,布莱恩。在此之前,只想对您的见解/帮助表示感谢。我是 Python 的相对新手。我想创建一个带有按钮的窗口,这些按钮在单击时会打开一个新窗口。当我第一次玩它时,我偶然发现了创建新的和独特的 Tks 以使其工作,例如。更新按钮指向一个函数,在该函数下,updatetk = tk.Tk()。有一个更好的方法吗?提前致谢。
  • 是的,有更好的方法。将第一个窗口创建为Tk 的实例后,所有其他窗口都应为Toplevel 的实例。

标签: python-3.x tkinter tkinter.checkbutton


【解决方案1】:

尝试为您的按钮使用 .state() 方法

>>> print(updateOrdertkCheckordstatusCbutton.state())  # checked
('selected',)
>>>> print(updateOrdertkCheckordstatusCbutton.state())  # not checked
()

【讨论】:

  • 谢谢维涅什!!!必须识别不同的状态并过滤这些状态,但至少它是可靠的。
猜你喜欢
  • 1970-01-01
  • 2018-05-17
  • 2023-04-07
  • 2022-08-18
  • 2018-10-20
  • 1970-01-01
  • 2016-06-16
  • 2018-10-26
  • 2020-02-21
相关资源
最近更新 更多