我一直在努力尝试找出这个问题。在使用tkinter和python时,我可以使用什么方法使用按钮返回函数的值?这是我目前的代码
def choice_message (message_title, message, choice_1, choice_2):
new_window = Tk()
new_window.minsize (400, 150)
new_window.maxsize (400, 150)
new_window.title (str (message_title))
Label (new_window, text = message, font = "Arial", wrap = 380, anchor = NW).place (x = 10, y = 0, width = 400, height = 100)
def yes ():
new_window.destroy ()
# Added code
def no ():
new_window.destroy ()
# Added code (same as yes but returns false (??))
Button (new_window, text = str (choice_1), font = "Arial", anchor = CENTER, command = yes).place (x = 90, y = 110, width = 100, height = 30)
Button (new_window, text = str (choice_2), font = "Arial", anchor = CENTER, command = no).place (x = 210, y = 110, width = 100, height = 30)
# ....
if (choice_message ("Hello", "This is a message text", "True", "False") == True):
print ("The Window Works...")
答案 0 :(得分:-1)
你必须以不同的方式构建它。
您可以创建一个具有self.result
且必须使用wait_window()
的类,以便它等到您关闭窗口。然后,您可以从self.result
您可以在choice_message中使用此类:
import tkinter as tk
# --- classes ---
# you can put this class in separated file
# (it will need `import tkinter`)
import tkinter
class MsgBox(tkinter.Toplevel):
def __init__(self, title="MsgBox", message="Hello World", choice1="OK", choice2="Cancel"):
tkinter.Toplevel.__init__(self)
self.result = None
self.choice1 = choice1
self.choice2 = choice2
self.title(title)
self.label = tkinter.Label(self, text=message, bg='white')
self.label.pack(ipadx=50, ipady=20)
self.button = tkinter.Button(self, text=str(self.choice1), command=self.on_press_choice1)
self.button.pack(side='left', ipadx=5, padx=10, pady=10)
self.button = tkinter.Button(self, text=str(self.choice2), command=self.on_press_choice2)
self.button.pack(side='right', ipadx=5, padx=10, pady=10)
# don't return to main part till you close this MsgBox
self.wait_window()
def on_press_choice1(self):
self.result = self.choice1
self.destroy()
def on_press_choice2(self):
self.result = self.choice2
self.destroy()
# --- functions ---
def choice_message(title, message, choice1, choice2):
msg = MsgBox(title, message, choice1, choice2)
# MsgBox is waiting till you close it
return msg.result
def choose():
if choice_message("Hello", "This is a message text", True, False) == True:
print("You choose: True")
else:
print("You choose: False")
def about():
msg = MsgBox()
# MsgBox is waiting till you close window
print("You choose:", msg.result)
def close():
msg = MsgBox('Closing', 'Are you sure?', 'Yes', 'No')
# MsgBox is waiting till you close window
if msg.result == 'Yes':
root.destroy()
# --- main ---
root = tk.Tk()
b = tk.Button(root, text="Choose", command=choose)
b.pack(fill='x', expand=True)
b = tk.Button(root, text="About", command=about)
b.pack(fill='x', expand=True)
b = tk.Button(root, text="Close", command=close)
b.pack(fill='x', expand=True)
root.mainloop()
Main MsgBox:
选择:
关于:
关闭: