【问题标题】:Python: How to use a tkinter Checkbutton in OOP functionsPython:如何在 OOP 函数中使用 tkinter Checkbutton
【发布时间】:2018-06-20 09:16:58
【问题描述】:

我被这段特殊的代码卡住了。我已将问题浓缩到本节。

我在 Python 中运行一种菜单,第一个菜单将您带到第二个菜单,而在第二个菜单中,有一个用户可以打开/关闭的复选按钮。在第三个菜单中,我希望它读取检查按钮是否打开/关闭并将其转换为布尔值。代码:

import tkinter as tk

class MainMenu(object):
    def __init__(self):
        self.launch_MainMenu()
    def launch_MainMenu(self):
        self.master = tk.Tk()
        tk.Button(self.master,text="MY BUTTON",command= lambda:self.launch_SideMenu()).grid()
        tk.mainloop()
    def launch_SideMenu(self):
        self.master2 = tk.Tk()
        self.var1 = tk.IntVar()
        tk.Checkbutton(self.master2,variable=self.var1).grid()
        tk.Button(self.master2,text="Test",command= lambda:self.launch_FinalMenu()).grid()
    def launch_FinalMenu(self):
        d = bool(int(self.var1.get()))
        print(d,self.var1.get())

mainMenu = MainMenu()

输出:无论复选框是打开还是关闭,它都会输出“False 0”。

任何帮助将不胜感激!

【问题讨论】:

  • 您正在创建多个Tk() 实例。你不能那样做。如果你在__init__方法中创建你的类变量(即self.var1)会更好。
  • 非常感谢您对 Lafexlos 的评论。除了 tk.Tk() 还有其他方法可以打开新的窗口框吗?
  • 你可以使用tkinter.Toplevel()
  • 非常感谢您的帮助!我在你回答的同时找到了它!这已经解决了。

标签: python oop tkinter


【解决方案1】:

根据 Lafexlos 的提示,错误在于调用 tk.Tk() 两次。对于新窗口,您必须使用 tk.Toplevel()。

只需将关键线更改为:

self.master2 = tk.Toplevel()

修复一切。这花了我很长时间来解决。感谢您的帮助,祝您今后阅读本文的程序员好运。

【讨论】:

    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多