gpt4 book ai didi

python - Tkinter 大文本对话(单击按钮时保存字符串)

转载 作者:行者123 更新时间:2023-11-30 23:28:03 25 4
gpt4 key购买 nike

我正在尝试制作一个大型文本输入弹出窗口作为 GUI 的一部分。这个想法是获得长段落的用户输入。问题在于 get_big_text() 方法在按下按钮之前返回。我怎样才能有一个像这样的单独的弹出窗口,并且能够将用户的文本保存到我的控制程序中的变量中?我的程序中的其他所有内容都已正常运行,直到我尝试实现这一点。我是 GUI 编程新手。我感觉这里等待用户输入有一些根本上的不同,但我无法在功能上下文中理解它。

我的目标是让 print(foo.get_big_text()) 行打印用户的文本,但它当然会打印 None 因为 get_big_text( ) 方法结束。

我省略了 gui 其余部分的细节,并编写了一个可能不需要的 __init__() ,但这是我的 gui 的基本原理沿着。 Toplevel 小部件是我的 gui 中唯一未以某种方式连接到 root 的小部件。

from tkinter import *

class Gui:

def __init__(self, root):
tframe = Frame(root)
tframe.pack(side='top')
bframe = Frame(root)
bframe.pack(side='bottom')
self.txt = Text(tframe)
self.txt.insert('0.0', 'Totally foobar')
self.txt.pack()
self.btn = Button(bframe, text='OK')
self.btn.pack()


def get_big_text(self, title='', text=''):
popup = Toplevel(height=160, width=180)
popup.title(title)
txtframe = Frame(popup)
txtframe.pack()
big_text = Text(txtframe)
big_text.insert('0.0',text)
big_text.pack()
btnframe = Frame(popup)
btnframe.pack()
grab_text = Button(btnframe)
grab_text.config(text="Done", command=lambda: big_text.get('0.0', 'end'))
grab_text.pack()

root=Tk()
root.title('Example')
foo = Gui(root)
print(foo.get_big_text())
root.mainloop()

最佳答案

您应该将文本传递给类中的一个函数,然后对其执行任何您想要的操作(例如打印):

from Tkinter import *

class Gui:

def __init__(self, root):
tframe = Frame(root)
tframe.pack(side='top')
bframe = Frame(root)
bframe.pack(side='bottom')
self.txt = Text(tframe)
self.txt.insert('0.0', 'Totally foobar')
self.txt.pack()
self.btn = Button(bframe, text='OK')
self.btn.pack()

def f(self, text):
print(text)

def get_big_text(self, title='', text=''):
popup = Toplevel(height=160, width=180)
popup.title(title)
txtframe = Frame(popup)
txtframe.pack()
big_text = Text(txtframe)
big_text.insert('0.0',text)
big_text.pack()
btnframe = Frame(popup)
btnframe.pack()
grab_text = Button(btnframe)
grab_text.config(text="Done", command=lambda: self.f(big_text.get('0.0', 'end')))
grab_text.pack()

root=Tk()
root.title('Example')
foo = Gui(root)
foo.get_big_text()
root.mainloop()

如果您想在 GUI 完成后打印文本,您可以进行以下修改:

  1. Gui.f 上:

        def f(self, text):
    self.text = text
  2. 在代码末尾:

    root.mainloop()
    print(foo.text)

关于python - Tkinter 大文本对话(单击按钮时保存字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21834535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com