代码之家  ›  专栏  ›  技术社区  ›  Tom Newing

在Tkinter中单击按钮时,如何在两个数字之间交替?

  •  1
  • Tom Newing  · 技术社区  · 1 年前

    我试图在Tkinter中设置一个按钮,开始显示“12”,并在单击时更改为“X”。我已经做到了,但我也希望它在再次点击时变回“12”,我无法弄清楚。从本质上讲,点击后它应该在“12”和“X”之间交替。

    我试图使用if语句来实现这一点,但它不起作用。以下是我目前所掌握的:

    import tkinter
    
    class MyGUI:
    
       def __init__ (self):
        
         self.window = tkinter.Tk()
         self.state = (self.button1["12"]) 
         
        
         self.button1 = tkinter.Button(self.window, text=("12"), font=('Arial',18), background=("red"), command=self.change_state)
         self.button1.pack(padx=10, pady=10)
    
    
         self.window.mainloop()
    
       def change_state(self):
        
        if self.state["12"] == True:
          self.button1(self.window, self.button1.config(text="X"))
        else:
           self.button1(self.window, self.button1.config(text="12"))
        
    
    
    MyGUI()
    

    这会产生此错误: 'MyGUI' object has no attribute 'button1'

    我真的很感激任何帮助,请注意,我对编程很陌生,学习Python是为了好玩。

    4 回复  |  直到 1 年前
        1
  •  1
  •   Daniel Paul    1 年前

    要在Tkinter中单击按钮时在“12”和“X”之间切换,可以使用布尔标志来跟踪当前状态。以下是您的代码的更正版本:

    import tkinter as tk
    
    class MyGUI:
    
        def __init__(self):
            self.window = tk.Tk()
            self.state = True  # Initial state set to True (representing "12")
            
            self.button1 = tk.Button(self.window, text="12", font=('Arial', 18), background="red", command=self.change_state)
            self.button1.pack(padx=10, pady=10)
            
            self.window.mainloop()
    
        def change_state(self):
            if self.state:
                self.button1.config(text="X")
            else:
                self.button1.config(text="12")
            self.state = not self.state  # Toggle the state
    
    
    MyGUI()
    

    解释 :

    1. 初始化: 创建主窗口。 初始化布尔值 state True 。这会跟踪按钮的当前文本(“12”时 没错 “X”时 False ). 创建初始文本为“12”的按钮,并将其与 change_state 方法。

    2. change_state方法: 检查当前状态。 如果 状态 没错 ,将按钮文本更改为“X”。 如果 状态 错误的 ,将按钮文本更改回“12”。 使用切换状态 self.state = not self.state .

    此代码确保每次单击按钮都会在“12”和“X”之间交替显示文本。

    希望这段代码对你有用 Best9jamusic

    Insight informer

        2
  •  1
  •   Suramuthu R    1 年前
    import tkinter
    
    # Remove braces
    class MyGUI:
    
       # define window and state as self variable
       def __init__ (self, window,state='12'):
           self.window = window
           self.state = state    
               
           self.button1 = tkinter.Button(self.window, text= self.state, font=('Arial',18), bg="red", command=self.change_state)
           self.button1.pack(padx=10, pady=10)     
    
       def change_state(self):
        
           # 1.You should not declare button once again while configuring
           # 2. As the condion is if self.state == '12', declare self.state for both conditions and make it as text
           if self.state == '12' :
               self.state = 'X'
               self.button1.config(text= self.state, bg="red")
           else:
               self.state = '12'
               self.button1.config(text= self.state, bg="red")     
         
        
    if __name__ == "__main__":
    
        # declare window here
        window = tkinter.Tk()
        app = MyGUI(window)
        window.mainloop()
    
        3
  •  1
  •   toyota Supra    1 年前

    开始显示“12”,并在单击时更改为“X”。我有 管理了这个,但我也希望它在点击时变回“12” 再一次,我想不出来。本质上,它应该交替 点击后,在“12”和“X”之间。

    这个问题是可以解决的。

    发表评论 #self.state = (self.button1["12"])

    不要使用 state 对于 Button 小装置。使用 configure 对于 按钮 小装置。只有州告诉 True False .

    Snippet重新写道:

    import tkinter
    
    class MyGUI:
    
       def __init__ (self):
        
         self.window = tkinter.Tk()
         #self.state = (self.button1["12"]) 
          
         self.button1 = tkinter.Button(self.window, text=("12"), font=('Arial',18), background=("red"), command=self.change_state)
         self.button1.pack(padx=10, pady=10)
    
         self.window.mainloop()
    
       def change_state(self):
        
        #if self.button1['state'] == tkinter.NORMAL:
            #self.button1.config(text="X")
        #elif self.button1.config[text=="X"]:
           #self.button1.config(text="12")
    
        if self.button1.configure('text')[-1] == 12:
            self.button1.configure(text="X")
            
        else:
            self.button1.configure(text =12)
                                  
    
    MyGUI()
    

    截图:

    enter image description here

        4
  •  0
  •   OldBoy    1 年前

    在构造函数中,您正在引用 button1 在你创建它之前。所以只要改变 self.state True ,一开始。然后在你的 change_state 当你检查是否 self.state == True ,您还需要将其更改为 False 下次单击按钮时。当它是 错误的 你需要把它改成 没错 ,例如:

    if self.state == True:
        self.button1.config(text="X")
        self.state = False
    else:
        self.button1.config(text="12")
        self.state = True
    

    如上所示,您需要更改修改按钮文本的两行。