2013-07-15 10 views
11

以下のコードは、テキストウィジェットでスクロールバーを使用するという、醜いながら機能的な例を生成し、いくつかの質問をもたらします。注:これは、WindowsのボックスでPython 3を使用して行われます。tkinter "scrolledtext"モジュールをコーディングする方法

  1. 表示され、スクロールバーがフレームに取り付けられており、それは、テキストボックスの内容をスクロールしますが、私はそれがテキストウィジェット自体に取り付けたことを好むだろう。私はこれを起こすことができませんでした。

  2. 「スクロールテキスト」と呼ばれるTkinterモジュールへの参照が多数ありますが、これはスクロールバーをテキストボックスに追加するためのはるかに優れたメカニズムと思われますが、それをインポートして呼び出す方法の例は見つかりません私は仕事に就くことができます(おそらく例が必要です)。


frame1 = tk.Frame(win,width=80, height=80,bg = '#808000') 
frame1.pack(fill='both', expand='yes') 
scrollbar = Scrollbar(frame1) 
scrollbar.pack(side=RIGHT, fill=Y) 
editArea = Text(frame1, width=10, height=10, wrap=WORD, yscrollcommand=scrollbar.set) 
editArea.pack()  
scrollbar.config(command=editArea.yview) 
editArea.place(x=10,y=30) 

答えて

20

あなたは正しかった。このように、あなたは、tkinter.scrolledtextモジュールからScrolledTextウィジェットを使用することができます。

import tkinter as tk 
import tkinter.scrolledtext as tkst 

win = tk.Tk() 
frame1 = tk.Frame(
    master = win, 
    bg = '#808000' 
) 
frame1.pack(fill='both', expand='yes') 
editArea = tkst.ScrolledText(
    master = frame1, 
    wrap = tk.WORD, 
    width = 20, 
    height = 10 
) 
# Don't use widget.place(), use pack or grid instead, since 
# They behave better on scaling the window -- and you don't 
# have to calculate it manually! 
editArea.pack(padx=10, pady=10, fill=tk.BOTH, expand=True) 
# Adding some text, to see if scroll is working as we expect it 
editArea.insert(tk.INSERT, 
"""\ 
Integer posuere erat a ante venenatis dapibus. 
Posuere velit aliquet. 
Aenean eu leo quam. Pellentesque ornare sem. 
Lacinia quam venenatis vestibulum. 
Nulla vitae elit libero, a pharetra augue. 
Cum sociis natoque penatibus et magnis dis. 
Parturient montes, nascetur ridiculus mus. 
""") 
win.mainloop() 

そして、そこに行く:

enter image description here

9

ScrolledTextウィジェットを使用するとコードを数行節約できるかもしれませんが、自分でできないことは何もしません。それを自分で行うと、謎の一部を取り除くのに役立ちます。

あなたは実際にはすべて正しいことをしています。あなたが作っている間違いは、テキストウィジェットがちょうどその小さな部分ではなく完全にそのコンテナを埋めるようにすべきだということです。

これを行うための標準的な方法は、このようなものです:これだけです

container = tk.Frame(...) 
text = tk.Text(container, ...) 
scrollbar = tk.Scrollbar(container, ...) 
scrollbar.pack(side="right", fill="y") 
text.pack(side="left", fill="both", expand=True) 

。さて、あなたのコンテナがウィンドウのサイズ変更などによってどれほど大きくなっても、スクロールバーは常にテキストウィジェットに添付されたように見えます。次に、GUI全体に追加するときに、コンテナ、テキストウィジェット、およびスクロールバーのすべてのグループを単一のウィジェットとして扱います。

ここでもグリッドを使用できます。あなたが垂直スクロールバーしか持っていなければ、パックは簡単です。水平スクロールバーと垂直スクロールバーの両方がある場合は、グリッドが少し意味があります。

幻影を完成させるには、テキストウィジェットの境界線幅をゼロに設定し、枠線の枠線幅を1に設定し、テキストウィジェットの「内側」にスクロールバーが表示されます。ここで

はあなたの例のように、多かれ少なかれに見える完全な実施例である:

import Tkinter as tk 

win = tk.Tk() 

win.configure(background="#808000") 

frame1 = tk.Frame(win,width=80, height=80,bg = '#ffffff', 
        borderwidth=1, relief="sunken") 
scrollbar = tk.Scrollbar(frame1) 
editArea = tk.Text(frame1, width=10, height=10, wrap="word", 
        yscrollcommand=scrollbar.set, 
        borderwidth=0, highlightthickness=0) 
scrollbar.config(command=editArea.yview) 
scrollbar.pack(side="right", fill="y") 
editArea.pack(side="left", fill="both", expand=True) 
frame1.place(x=10,y=30) 

win.mainloop() 

個人的に私は、世界的な輸入を行うことをお勧めしません、と私は場所を使用することはお勧めしませんが、私が欲しかったですこれをできるだけオリジナルに近づけるようにしてください。

関連する問題