我正在尝试使用python tkinter制作GUI。 我想在按下analyze按钮后将输入文本从文本框打印到控制台。 这是我的代码
root = Tk()
root.title('Title')
MiddleFrame = Frame(root)
BottomFrame = Frame(root)
TopFrame.pack(side = TOP)
MiddleFrame.pack()
BottomFrame.pack(side = BOTTOM)
TextArea = Text()
ScrollBar = Scrollbar(root)
ScrollBar.config(command = TextArea.yview)
TextArea.config(height = 25, width = 70,
background = "white", yscrollcommand = ScrollBar.set)
TextArea.grid(padx = 18, pady = 18)
ScrollBar.pack(side = RIGHT, fill = Y)
padx = 10
pady = 10
TextArea.pack(padx = padx, pady = pady)
AnalyzeButton = Button(BottomFrame, text = "Analyze", fg = "white", bg = "blue", command = callback)
AnalyzeButton.pack(fill = X, padx = padx, pady = pady)
def callback():
text_input = Text.get()
print(text_input)
root.mainloop()
提前致谢
答案 0 :(得分:0)
使用文本的get方法。使用小部件而不是类 - 文本。这是你需要做的: -
text_input = TextArea.get("1.0","end-1c")
答案 1 :(得分:0)
您的代码中存在多个问题。我会将其分解,以便您了解这里发生的事情。
拳头我注意到你试图收拾TopFrame
但你还没有真正定义TopFrame
。所以我在您的代码中添加了TopFrame = Frame(root)
。
接下来,我们遇到了在尝试在同一窗口/框架上使用grid()
和pack()
时遇到的常见错误。几何管理器不允许这样做。因此,您需要在grid()
或pack()
中决定每个窗口/框架中的所有需求。现在我将TextArea.grid()
更改为TextArea.pack()
以使您的代码正常工作。
接下来,您的按钮命令引用了命令后面的函数。这不适用于课程外,因此您需要将callback()
函数移到AnalyzeButton
之上。
接下来,我们需要修复callback()
函数的缩进。你必须记住indention在python中是非常重要的,你应该注意保持你的缩进清洁和一致。
我们需要修复的最后一件事就是改变:
text_input = Text.get()
要:
text_input = TextArea.get(1.0, END)
您试图在创建文本小部件的方法上调用get()
而不是小部件实例。
您还需要定义要从文本窗口小部件的哪个部分开始读取数据以及要通过文本窗口小部件读取的距离。这是通过使用1.0, END
或"1.0", "end-1c"
应用2个位置点来完成的,因为tkinter允许使用几种方法来应用这些点。这将说明1.0
从该行第一个位置的第一行开始,END
将读取直到文本框的最后一行。
可能还有其他问题,但我只修复了阻止代码按预期工作的问题。您的代码修改为以下工作:
from tkinter import *
root = Tk()
root.title('Title')
TopFrame = Frame(root) # was missing from your code
MiddleFrame = Frame(root)
BottomFrame = Frame(root)
TopFrame.pack(side = TOP)
MiddleFrame.pack()
BottomFrame.pack(side = BOTTOM)
TextArea = Text()
ScrollBar = Scrollbar(root)
ScrollBar.config(command = TextArea.yview)
TextArea.config(height = 25, width = 70,
background = "white", yscrollcommand = ScrollBar.set)
TextArea.pack() # can't use pack and grid on the same window/frame. Changed this to pack()
ScrollBar.pack(side = RIGHT, fill = Y)
padx = 10
pady = 10
TextArea.pack(padx = padx, pady = pady)
# this function needs to be before the command that references it.
def callback():
# fixed indention
text_input = TextArea.get(1.0, END) # you need to reference that widget name not the tkinter method used to create the widget.
print(text_input)
AnalyzeButton = Button(BottomFrame, text = "Analyze", fg = "white", bg = "blue", command = callback)
AnalyzeButton.pack(fill = X, padx = padx, pady = pady)
root.mainloop()