9

ユーザーがアプリケーションで必要なFrame数のテキストフィールドを追加できる、が必要です。

アプリケーションは、テキストフィールドと、そのテキストフィールドの下にあるボタンで始まります。ユーザーがボタンを押すと、最初のテキストの下に新しいテキストエントリが追加されます(これは数え切れないほど繰り返される場合があります)。ウィンドウの中央には、Textテキストを表示するために使用されるウィジェットがあります:)

しかし、私はドキュメントでこれに気づきました:

This widget is used to implement scrolled listboxes, canvases, and text fields.

でを使用する方法はありScrollbarますFrameか?

4

2 に答える 2

8

Tix を使用できる場合は、windowFrame と 1 つまたは 2 つの Scrollbar ウィジェットを持つ ScrolledWindow ウィジェットがあります。

import Tix as tk

r= tk.Tk()
r.title("test scrolled window")
sw= tk.ScrolledWindow(r, scrollbar=tk.Y) # just the vertical scrollbar
sw.pack(fill=tk.BOTH, expand=1)
for i in xrange(10):
    e= tk.Entry(sw.window)
    e.pack()
r.mainloop()

ルート ウィンドウのサイズを変更します。Entry ウィジェットの focus_get イベントにコードを追加して、キーボードでタブ移動するときに ScrolledWindow をスクロールする必要があります。

それ以外の場合は、Canvas ウィジェット (Label、Entry、および Text サブウィジェットを追加できます) を使用し、必要な機能を実装するために自分でさらに多くのコードを記述する必要があります。

于 2009-12-10T00:14:59.970 に答える
7

以下は、ドキュメントから取得した、グリッドジオメトリ マネージャーのみを使用する場合にのみ機能するスクロールバーの自動非表示の例です。effbot.org

from tkinter import *


class AutoScrollbar(Scrollbar):
    # A scrollbar that hides itself if it's not needed.
    # Only works if you use the grid geometry manager!
    def set(self, lo, hi):
        if float(lo) <= 0.0 and float(hi) >= 1.0:
            # grid_remove is currently missing from Tkinter!
            self.tk.call("grid", "remove", self)
        else:
            self.grid()
        Scrollbar.set(self, lo, hi)
    def pack(self, **kw):
        raise TclError("cannot use pack with this widget")
    def place(self, **kw):
        raise TclError("cannot use place with this widget")


# create scrolled canvas

root = Tk()

vscrollbar = AutoScrollbar(root)
vscrollbar.grid(row=0, column=1, sticky=N+S)
hscrollbar = AutoScrollbar(root, orient=HORIZONTAL)
hscrollbar.grid(row=1, column=0, sticky=E+W)

canvas = Canvas(root, yscrollcommand=vscrollbar.set, xscrollcommand=hscrollbar.set)
canvas.grid(row=0, column=0, sticky=N+S+E+W)

vscrollbar.config(command=canvas.yview)
hscrollbar.config(command=canvas.xview)

# make the canvas expandable
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

# create canvas contents
frame = Frame(canvas)
frame.rowconfigure(1, weight=1)
frame.columnconfigure(1, weight=1)

rows = 5
for i in range(1, rows):
    for j in range(1, 10):
        button = Button(frame, text="%d, %d" % (i,j))
        button.grid(row=i, column=j, sticky='news')

canvas.create_window(0, 0, anchor=NW, window=frame)
frame.update_idletasks()
canvas.config(scrollregion=canvas.bbox("all"))

root.mainloop()
于 2009-12-10T21:25:24.420 に答える