2009-12-09 10 views
8

Frameが必要です。アプリケーションで必要な数のテキストフィールドを追加できます。Tkinterのスクロールバーでフレームを取得するにはどうすればよいですか?

アプリケーションは、テキストフィールドと、そのテキストフィールドの下のボタンで始まります。ユーザーがボタンを押すと、新しいテキスト入力が最初のテキスト入力の下に追加されます(これは何度も繰り返されることがあります)。ウィンドウの中央には、テキスト:)

を表示するために使用Textウィジェットがあるでしょうが、私はドキュメントでこれを気づいた:

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

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

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() 

変更ルートウィンドウのサイズ:あなたはTixのを使用できる場合

答えて

8

は、windowフレーム1つのまたは2つのスクロールバーのウィジェットを持っているスクロールウィンドウウィジェットがあります。 Entryウィジェットのfocus_getイベントにコードを追加して、キーボードをタブで移動するときにScrolledWindowをスクロールしたい場合があります。

それ以外の場合は、キャンバスウィジェット(ラベル、エントリ、テキストのサブウィジェットを追加することができます)を使用して、必要な機能を実装するためにさらに多くのコードを書く必要があります。

6

次はあなただけ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() 
+0

を関連性があります。私はWindows用のPython 2.6.6をダウンロードしました.Tixに付属しています。だから、Tkinterと同様に動作するようです。 –

+0

ありがとう!それは大きな助けとなりました。 – reckoner

+0

この回答のコードを再利用可能な 'class'にリファクタリングしようとしましたが、失敗しました。ここで私の質問を見る瞬間があるなら、本当に感謝します:http://stackoverflow.com/questions/30018148/python-tkinter-frame-class-with-autohiding-scroll-barsまた、Rinzlerなぜあなた自身が答えとしてではなく、このコードを編集として投稿したのですか? 2010年の既存のコメントは今や理にかなっていないし、このコードをアップグレートしてくれた代理人は、コードとは関係のない、やり直しになるだろう。新しい回答を投稿し、編集内容をロールバックする必要があります。 – ArtOfWarfare

関連する問題