[Python - Tkinter]:按钮 1 创建一个小部件,按钮 2 需要访问它。有没有办法在不使用全局变量的情况下做到这一点?

问题描述 投票:0回答:1

我有 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 更改并保存文件。

我也考虑过使用类,但我还是个新手,对它们的理解还不够深入,无法使其发挥作用。

python user-interface tkinter tkinter-entry tkinter-button
1个回答
0
投票

使用只有一个实例的类,如果有人正在搜索并发现它有用......?

    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的实例。让我担心的是,这个只会有一次使用,但是嘿,至少它不会将东西发送到全球......?

© www.soinside.com 2019 - 2024. All rights reserved.