繁体   English   中英

Python:tkinter:创建自定义窗口提示

[英]Python: tkinter: creating a custom window prompt

我一直在努力尝试找出这个问题。 在使用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...")

您将不得不以不同的方式来构建它。

您可以创建一个具有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()

主MsgBox:

MsgBox主窗口

选择:

选择视窗

关于:

关于窗口

关:

关闭窗口

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM