python - 如何将变量从 tkinter 表单传递给不同的函数?
问题描述
我正在尝试为一些使用具有多种形式的 tkinter 并以不同功能访问表单数据的高中生做一个例子。我试图使示例保持简单,但有一个小问题。sv3
&sv4
变量没有从第二种形式中获取值。有什么建议或想法吗?
from tkinter import *
root = Tk()
sv1 = StringVar()
sv2 = StringVar()
sv3 = StringVar()
sv4 = StringVar()
#first function - this DOES NOT take text from entry widgets and displays, but should
def callback2():
test2 = sv3.get()
print(test2)
print (sv4.get())
print("show second form entry widgets values")
return True
#first function - this takes text from entry widgets and displays
def callback():
test = sv1.get()
print(test)
print (sv2.get())
print("show first form entry widgets values")
new_form()
return True
#new form
def new_form():
newfrm = Tk()
entry3 = Entry(newfrm, textvariable=sv3).pack()
entry4 = Entry(newfrm, textvariable=sv4).pack()
button = Button(newfrm, text="Click Me", command=callback2).pack()
newfrm.mainloop()
#initial form
def main_form():
entry1 = Entry(root, textvariable=sv1).pack()
entry2 = Entry(root, textvariable=sv2).pack()
button = Button(root, text="Click Me", command=callback).pack()
root.mainloop()
main_form()
解决方案
这里如何避免使用多个Tk
实例并手动将值从前两个Entry
s 传输到第二对。请参阅带有####
注释的行。
from tkinter import *
root = Tk()
sv1 = StringVar()
sv2 = StringVar()
sv3 = StringVar()
sv4 = StringVar()
#first function - this now take text from entry widgets and displays as it should.
def callback2():
test2 = sv3.get()
print(test2)
print (sv4.get())
print("show second form entry widgets values")
return True
#first function - this takes text from entry widgets and displays
def callback():
test = sv1.get()
print(test)
print (sv2.get())
print("show first form entry widgets values")
new_form()
return True
#new form
def new_form():
#### newfrm = Tk()
newfrm = Toplevel() #### Instead.
sv3.set(sv1.get()) #### Trasfer value.
sv4.set(sv2.get()) #### Trasfer value.
entry3 = Entry(newfrm, textvariable=sv3).pack()
entry4 = Entry(newfrm, textvariable=sv4).pack()
button = Button(newfrm, text="Click Me", command=callback2).pack()
newfrm.mainloop()
#initial form
def main_form():
entry1 = Entry(root, textvariable=sv1).pack()
entry2 = Entry(root, textvariable=sv2).pack()
button = Button(root, text="Click Me", command=callback).pack()
root.mainloop()
main_form()
推荐阅读
- javascript - 用于将保存的搜索转换为 csv 的 Netsuite 套件脚本
- facebook - 脸书广告”
/insights”端点返回错误 - c# - 如何在 C++ 中创建 DirectX12 COM 对象并在 C# 中使用它来初始化 Silk.NET 中的对象
- git - 如何撤消我因错误创建的 git 文件夹?
- react-native - 当多个文本列表项超过容器大小时,如何断行?
- flutter - flutter 同屏弹出对话框
- c - 为什么我的程序中的 read() 系统调用会导致几种不同的可能结果?
- laravel-8 - 属性 [participants_count] 不存在但存在并且可以转储
- python - Python中的AttributeError(问答游戏,导入字典)
- python - 星期几