有些时候,我们需要使用弹出窗口,对程序的运行参数进行设置。有两种选择
一、标准窗口
如果只对一个参数进行设置(或者说从弹出窗口取回一个值),那么可以使用simpledialog,导入方法:
from tkinter.simpledialog import askstring, askinteger, askfloat
完整例子
import tkinter as tk
from tkinter.simpledialog import askstring, askinteger, askfloat
# 接收一个整数
def print_integer():
res = askinteger("Spam", "Egg count", initialvalue=12*12)
print(res)
# 接收一个浮点数
def print_float():
res = askfloat("Spam", "Egg weight\n(in tons)", minvalue=1, maxvalue=100)
print(res)
# 接收一个字符串
def print_string():
res = askstring("Spam", "Egg label")
print(res)
root = tk.Tk()
tk.Button(root, text='取一个字符串', command=print_string).pack()
tk.Button(root, text='取一个整数', command=print_integer).pack()
tk.Button(root, text='取一个浮点数', command=print_float).pack()
root.mainloop()
二、自定义窗口
如果要设置的参数个数超过两个,那么tkinter提供的标准窗口就处理不了了。
这就需要自定义一个窗口,那么问题来了:怎样将自定义窗口中的数据传回主窗口?
百度查询,不外乎两种方法:全局变量(global)、对象变量([]、{}等),都不是我想要的。
然后,去 stackoverflow 逛了一下,综合了个问题的答案,得到两个本人比较满意的方案。
一种是松耦合,另一种是紧耦合
1)松耦合
说明:
主窗类,继承了 tk.Tk
弹窗类,继承了 tk.Toplevel
要点:
弹窗,将多个数据,打包,放入一个名为 username