1.button按钮执行带参数的函数
import tkinter as tk
def run():
print('不带参数')
def add(a,b):
sum =a +b
print(f'带参数运行,sum={sum}')
if __name__ == '__main__':
root = tk.Tk()
buttonLogin1 = tk.Button(root, text="button1", command=run)
buttonLogin2 = tk.Button(root, text="button2", command=lambda :add(1,2))
buttonLogin1.grid(row=0, column=0, sticky=tk.W, padx=20)
buttonLogin2.grid(row=0, column=1, sticky=tk.W, padx=20)
root.mainloop()
2.带输入框的计算界面
import tkinter as tk
def run():
print('不带参数')
def add(a,b):
sum =(a) +b
print(f'带参数运行,sum={sum}')
if __name__ == '__main__':
root = tk.Tk()
label_1 = tk.Label(root, text="请输入数字:")
label_1.grid(row=0, column=0)
entry_1 = tk.Entry(root)
entry_2 = tk.Entry(root)
entry_1.grid(row=0, column=1) # entry1占据1列1行 column列 row行
entry_2.grid(row=0, column=2) # entry2占据1列2行
buttonLogin1 = tk.Button(root, text="button1", command=run)
#输入框获取的值为字符串,所以想要指向加法结果要将数据转化eval()能够将数据转换数据类型
buttonLogin2 = tk.Button(root, text="button2", command=lambda :add(eval(entry_1.get()),eval(entry_2.get())))
buttonLogin1.grid(row=1, column=0, sticky=tk.W, padx=20)
buttonLogin2.grid(row=0, column=4, sticky=tk.W, padx=20)
buttonExit = tk.Button(root, text="退出", command=root.quit)
buttonExit.grid(row=10, column=1)
root.mainloop()
3. 下拉列表无法实现自动更新问题
在上面的代码基础上加上
def choice():
png_name = os.listdir('放大图') #此处放大图为文件夹的名字
return png_name
if __name__ == '__main__':
root = tk.Tk()
png_name = choice()
comvalue1 = tk.StringVar() # 窗体自带的文本,新建一个值
comvalue2 = tk.StringVar()
comboxlist1 = ttk.Combobox(root,width=15, textvariable=comvalue1) # 初始化
comboxlist2 = ttk.Combobox(root,width=15, textvariable=comvalue2) # 初始化
comboxlist1["values"] = png_name #下拉列表值为读取放大图文件夹下的文件名
comboxlist2["values"] = png_name
comboxlist1.grid(row=3, column=1)
comboxlist2.grid(row=3, column=4)
......#后面接上分的代码
代码执行结果,如果在放大图的文件夹下修改或者删除图片的话,这两个下拉列表就无法实时更新,在网上查找资料因为tk会卡顿,所以采取了一个折中的办法:制作了一个按钮来更新列表
def flush():
png_name = choice()
print(f'正在加载更新的数据{png_name}')
# comboxlist1["values"] = png_name
# comboxlist2["values"] = png_name
comboxlist1["values"] = png_name
comboxlist2["values"] = png_name
if __name__ == '__main__':
....
buttonLogin_update = tk.Button(root, text="更新列表", command=flush)
buttonLogin_update.grid(row=4,column=7)
...
最后就能够实现每按一次按钮就会更新一个下拉列表的数据。