0

我制作了一个显示窗口的程序,并将用户输入打印到 aLabel中,并将将来的任何输入添加到Label新行中。

我的问题是,一旦x达到行数,文本就会超出 的范围Label,并且您看不到它。

我想要做的是将新输入放置在所有输入的底部,导致顶线被向上推到标签顶部之外。

到目前为止,这是整个代码:

from tkinter import *

string = None
labelContents = ""

class App(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.master = master
        self.initUI()

    def initUI(self):
        global string
        self.master.title("Tkinter test")

        string = StringVar()

        frame = Frame(self, relief=RIDGE, borderwidth=3, width=300, height=50)
        frame.pack(fill=BOTH, expand=1)

        label = Label(self, justify=LEFT, relief=RIDGE, borderwidth=3, textvariable=string, width=300, height=5, anchor=NW)
        label.pack(fill=BOTH, expand=1)

        self.pack(fill=BOTH, expand=1)

        self.textEntry = Entry(self)
        self.textEntry.bind('<Return>', self.updateLabel)
        self.textEntry.pack(side=TOP, fill=X, padx=5, pady=5)

        closeButton = Button(self, text="Close", height=1, width=10, command=self.close)
        closeButton.pack(side=RIGHT, padx=5, pady=5)

    def close(self):
        self.master.destroy()

    def updateLabel(self, event):
        global string
        global labelContents
        labelContents += self.textEntry.get()
        labelContents += "\n"
        string.set(labelContents)
        self.textEntry.delete(0, END)

def main():
    root = Tk()
    root.geometry("400x500+440+262")
    root.resizable(0, 0)
    app = App(root)
    root.mainloop()

if __name__ == "__main__":
    main()
4

1 回答 1

1

听起来您想使用文本小部件或列表框而不是标签,因为小部件能够将内容从顶部滚动。否则,您必须自己管理标签中的数据。

对于后者,在您的 updateLabel 函数中,您可以首先获取标签的现有内容,然后在换行符处拆分以提供列表。接下来,如果列表长于 5,则追加新项目并弹出项目。然后,用换行符加入列表并将其放回标签中。

于 2013-03-28T20:09:58.777 回答