创建一个Tkinter类并等待返回值

伊尔米奥

我有一个tkinter课:

class DBCreatorWin():
    def closeWindow(self):
        tkMessageBox.showinfo("Ilmiont SQLite Database Manager", "This window cannot be closed.\nEnter a database name and press Continue.")

    def returnName(self):
        dbName = self.entry.get()
        self.window.destroy()
        return dbName

    def __init__(self):
        self.window = Toplevel()
        self.window.transient(tkRoot)
        self.window.grab_set()
        self.window.resizable(width=False, height=False)
        self.window.title("Ilmiont SQLite Database Manager")
        self.window.protocol("WM_DELETE_WINDOW", self.closeWindow)

        self.label = Label(self.window, text="Enter the name of the database to be created: ")
        self.entry = Entry(self.window, width=30)
        self.button = Button(self.window, text="Continue", command=self.returnName)
        self.label.grid(row=0, column=0)
        self.entry.grid(row=0, column=1)
        self.button.grid(row=1, column=0, columnspan=2)

我想在我的主代码中创建此类的实例,然后等待返回值。用户在输入字段中输入名称,然后按继续按钮。此时,该值应返回到最初实例化该类的位置。我该怎么办?我似乎无法使其正常工作,并且对tkinter不熟悉。

在此先感谢Ilmiont

布莱恩·奥克利(Bryan Oakley)

有两种方法可以做到这一点。基本思想是使用tkinter方法在返回之前等待特定事件。Tkinter提供了两种方法来做到这一点:wait_windowwait_variable最常见的方法是打开一个窗口,然后等待它被销毁。在effbot网站上的Dialog Windows页面上可以找到一些很好的示例

这是一个简单的例子。它尚未准备就绪,但可以说明总体思路。至少您要在对话框上添加一个抓取,以便在对话框打开时不能与主窗口进行交互,因为您说过希望对话框是模态的。

import Tkinter as tk
class MyDialog(object):
    def __init__(self, parent):
        self.toplevel = tk.Toplevel(parent)
        self.var = tk.StringVar()
        label = tk.Label(self.toplevel, text="Pick something:")
        om = tk.OptionMenu(self.toplevel, self.var, "one", "two","three")
        button = tk.Button(self.toplevel, text="OK", command=self.toplevel.destroy)
        label.pack(side="top", fill="x")
        om.pack(side="top", fill="x")
        button.pack()

    def show(self):
        self.toplevel.deiconify()
        self.toplevel.wait_window()
        value = self.var.get()
        return value


class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)

        self.button = tk.Button(self, text="Click me!", command=self.on_click)
        self.label = tk.Label(self, width=80)
        self.label.pack(side="top", fill="x")
        self.button.pack(pady=20)

    def on_click(self):
        result = MyDialog(self).show()
        self.label.configure(text="your result: %s" % result)

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.mainloop()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何创建一个返回值的异步任务?

Angular 2 在启动另一个函数之前等待函数返回值

使用一个返回值?

加一个返回值?

如何优雅地创建一个返回lambda返回值或什么都不返回的函数?

从Haskell中A类类型的函数中的另一个B类返回值

创建一个返回随机值的 Dice 类

创建一个列以在3个月内返回值

如何从另一个类获取返回值

从另一个类中的函数获取返回值

不兼容的类型错误:操作另一个类的方法的返回值

创建一个没有返回值的AngularJS承诺

创建一个函数以从异步查询返回值

模拟在测试方法内部创建的返回值(它是一个对象)

为什么NSInvocation返回值会创建一个僵尸?

如何创建一个引发异常或基于条件返回值的表达式?

如何从我在另一个班级创建的特殊组件中返回值

如何重复一个函数,直到它的返回值与之前的返回值匹配?

使用一个方法的返回值作为同一个类中另一个方法的参数

返回值到另一个活动

PHP在返回值之前遍历一个函数

如何从一个特定对象返回值?

使用另一个函数返回值

尝试从另一个表返回值

一个仅从KeyValuePair返回值的函数

将方法的返回值作为参数传递给同一类中的另一个方法

在 Java 中获取和打印从一个类到另一个类的返回值时遇到问题

等待异步函数在 Typescript 中返回一个值。

模拟和修补类方法并将其返回值提供给另一个函数