0

我无法从用户输入中获取多行并将其显示回给他们。我正在使用 OOP 制作一个窗口,让用户输入他们的文章,并有一个窗口将其显示给他们。当我使用 时.get(),什么都没有出现。有什么建议么?

import tkinter
from tkinter import *
class userInterface:
    def __init__(self):
        pass

    def uploadWindow(self):
        #Generic window that is used for each new window 
        self.essayAdd = tkinter.Tk()
        self.essayAdd.geometry("1500x900")
        self.essayAdd.title("Text Analysis")
        self.essayAdd.mainloop

    def copyPasteCommand(self):
        #Creates a new window with space to copy and paste text
        self.uploadWindow()
        #Title of window
        tkinter.Label(self.essayAdd, text = "Uploading your essay", fg = "white", bg = "purple", font=("Helvetica", 20)).pack(fill = "x")

        #Creating an input for user to paste their essay
        tkinter.Label(self.essayAdd, text="Please paste your essay below.", font=("Helvetica", 16)).place(x = 50, y=40)
        self.userEssayLabel = Text()
        self.scrollBar = Scrollbar(self.essayAdd)
        self.scrollBar.config(command=self.userEssayLabel.yview)
        self.userEssayLabel.config(yscrollcommand=self.scrollBar.set)
        self.scrollBar.pack(side=RIGHT, fill=Y)
        self.userEssayLabel.pack(expand=YES, fill=BOTH)
        self.userEssay = self.userEssayLabel.get("1.0", END)
        #Creating buttons to quit and move on to next step
        #Quit
        self.quitting = tkinter.Button(self.essayAdd, text = "Quit", fg = "purple", font =("Helvetica", 16), command = self.essayAdd.destroy).place(x=50, y=600)
        #Next step
        self.enter = tkinter.Button(self.essayAdd, text = "Enter", fg = "purple", font =("Helvetica", 16), command = self.essayWindow).place(x=1235, y=600)


    def essayWindow(self):
        self.essayAdd.destroy()
        self.uploadWindow()
        tkinter.Label(self.essayAdd, text = "Essay Analysis", fg = "white", bg = "purple", font=("Helvetica", 20)).pack(fill = "x")
        tkinter.Label(self.essayAdd, text = self.userEssay, fg = "white", bg = "purple", font=("Helvetica", 16)).place(x=1235, y=600)

execute = userInterface()
execute.copyPasteCommand()
4

2 回答 2

0

您在self.userEssayLabel.get("1.0", END)创建文本小部件后的几毫秒内调用,远在用户有机会输入任何数据之前。

您需要等待调用该get方法,直到您真正需要小部件的内容,而不是之前。

于 2020-02-03T15:49:53.120 回答
0

有一些事情你需要解决,有一些事情我会改变。

  1. self.essayAdd.mainloop在这里什么都不做。您需要()像这样在末尾添加:self.essayAdd.mainloop().

  2. self.userEssay = self.userEssayLabel.get("1.0", END)当你想的时候没有发生。这只发生在您的代码运行的实例中,并且再也不会发生。所以它基本上有一个空字符串分配给self.userEssay.

  3. 我不会place()用于按钮和标签。place()有它的位置,但在大多数情况下你会想要使用grid()pack()大部分你的小部件放置。

  4. 你过度使用self.. 前缀self.用于标识类属性,并且唯一需要成为类属性的东西是,它是否可以从一个单独的方法访问,而不是它是在类中或由类之外的代码创建的。

  5. 当你只需要一个时,你import tkinter都在使用它们。from tkinter import *首选方法是import tkinter as tk。然后,您只需在需要的tk任何地方使用前缀。

  6. 看到你正在使用一个我会继承的类Tk()而不是做self.essayAdd = tkinter.Tk(). 我们可以通过这种方式更轻松地管理事情,并在课堂上获得我们需要的所有功能。

这里所说的只是你的代码清理了一点。如果您有任何问题,请告诉我。

import tkinter as tk


class UserInterface(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry('1500x900')
        self.title('Text Analysis')
        self.columnconfigure(0, weight=1)
        self.columnconfigure(1, weight=1)
        self.main_frame = tk.Frame(self)
        self.main_frame.columnconfigure(0, weight=1)
        self.main_frame.grid(row=1, column=0, columnspan=2, sticky='nsew')
        tk.Label(self, text='Please paste your essay below.',
                 font=('Helvetica', 16)).grid(row=0, column=0, columnspan=2, sticky='ew')
        tk.Label(self, text='Uploading your essay', fg='white', bg='purple',
                 font=('Helvetica', 20)).grid(row=2, column=0, columnspan=2, sticky='ew')

        self.user_essay_label = tk.Text(self.main_frame)
        scrollbar = tk.Scrollbar(self)
        scrollbar.config(command=self.user_essay_label.yview)
        self.user_essay_label.config(yscrollcommand=scrollbar.set)

        scrollbar.grid(row=1, column=2)
        self.user_essay_label.grid(row=0, column=0, sticky='nsew')

        tk.Button(self, text='Quit', fg='purple', font=('Helvetica', 16),
                  command=self.destroy).grid(row=3, column=0)
        tk.Button(self, text='Enter', fg='purple', font=('Helvetica', 16),
                  command=self.essay_window).grid(row=3, column=1)

    def essay_window(self):
        self.main_frame.destroy()
        self.main_frame = tk.Frame(self)
        self.main_frame.grid(row=1, column=0, columnspan=2, sticky='nsew')
        tk.Label(self.main_frame, text='Essay Analysis', fg='white', bg='purple',
                 font=('Helvetica', 20)).pack(fill='x')
        tk.Label(self.main_frame, text=self.user_essay_label.get('1.0', 'end'), fg='white', bg='purple',
                 font=('Helvetica', 16)).place(x=1235, y=600)


if __name__ == '__main__':
    UserInterface().mainloop()
于 2020-02-03T16:06:53.493 回答