我有 2 个按钮。
button_step_1
需要能够创建输入框,并且 button_step_2
需要能够从 button_step_1
访问条目。
我这样设置是因为我需要一个函数来创建多个
n
输入框,其中 n
由 function_1
打开的文件的属性确定。用户将在按 Entry
和按 button_1
之间输入 button_2
的值,因此理想情况下,按 button_2
即可检索该条目。
import tkinter as tk
window = tk.Tk()
frame = tk.Frame(window)
def function_1():
global some_string_entry
some_string_entry = tk.Entry(frame)
some_string_entry.pack()
def function_2():
another_string = some_string_entry.get() + " and green eggs and ham"
# perform function with entry created from button 1
print(another_string)
button_step_1 = tk.Button(frame, text="Button 1", command=function_1)
button_step_2 = tk.Button(frame, text="Button 2", command=function_2)
button_step_1.pack()
button_step_2.pack()
frame.pack()
window.mainloop()
有更好的方法吗?还有其他更适合的 GUI 系统吗?
我尝试使用 StringVar 根据 this google result:
传输条目 from tkinter import *
root=Tk()
def method2():
x="Done it !"
m.set(x)
m=StringVar()
b1=Button(root, text="Click", command=method2).pack()
lb1=Label(root, text="...", textvariable=m).pack()
root.mainloop()
但是他们的示例不涉及按下按钮之间的字符串变化......
import tkinter as tk
from functools import partial
window = tk.Tk()
frame = tk.Frame(window)
def function_1():
some_string_entry = tk.Entry(frame)
some_string_entry.pack()
transportation_string_var.set(some_string_entry.get())
def function_2():
another_string = transportation_string_var.get() + " and green eggs and ham"
print(another_string)
transportation_string_var = tk.StringVar(window)
button_step_1 = tk.Button(frame, text= "Button 1", command=function_1) # creating button 1
button_step_2 = tk.Button(frame, text= "Button 2", command= partial(function_2, transportation_string_var))
button_step_1.pack()
button_step_2.pack()
frame.pack()
window.mainloop()
我考虑过以不同的方式构建 GUI 工作流程,但这很困难,因为功能 1 打开并向用户呈现文件,用户做出决定,然后根据这些决定,功能 2 更改并保存文件。
我也考虑过使用类,但我还是个新手,对它们的理解还不够深入,无法使其发挥作用。
使用只有一个实例的类,如果有人正在搜索并发现它有用......?
import tkinter as tk
window = tk.Tk()
class frame_1:
def __init__(self):
self.frame = tk.Frame(window)
self.some_string_entry = None
def function_1(self):
self.some_string_entry = tk.Entry(self.frame)
self.some_string_entry.pack()
def function_2(self):
another_string = self.some_string_entry.get() + " and green eggs and ham"
# perform function with entry created from button 1
print(another_string)
frame_class_instance = frame_1()
button_step_1 = tk.Button(frame_class_instance.frame, text="Button 1", command=frame_class_instance.function_1)
button_step_2 = tk.Button(frame_class_instance.frame, text="Button 2", command=frame_class_instance.function_2)
button_step_1.pack()
button_step_2.pack()
frame_class_instance.frame.pack()
window.mainloop()
我之前搞砸的地方是我忘记创建frame_1的实例。让我担心的是,这个只会有一次使用,但是嘿,至少它不会将东西发送到全球......?