0

ウィンドウを表示し、ユーザー入力を に出力し、Label今後の入力を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 に答える