[解決済み] フレーム用Tkinterスクロールバー
質問
私の目的は、いくつかのラベルを含むフレームに垂直スクロールバーを追加することです。フレーム内のラベルがフレームの高さを超えると同時に、スクロールバーが自動的に有効になるようにする必要があります。検索した後、私は見つけた
この
という有用な投稿を見つけました。その投稿に基づき、私が望むことを達成するために、(私が初心者であるため、間違っていたら訂正してください)私が作成しなければならないことを理解しました。
Frame
を最初に作成し、次に
Canvas
を作成し、スクロールバーもそのフレームに貼り付けます。その後、別のフレームを作成し、ウィンドウ・オブジェクトとしてキャンバスの中に配置します。で、最終的にこうなる。
from Tkinter import *
def data():
for i in range(50):
Label(frame,text=i).grid(row=i,column=0)
Label(frame,text="my text"+str(i)).grid(row=i,column=1)
Label(frame,text="..........").grid(row=i,column=2)
def myfunction(event):
canvas.configure(scrollregion=canvas.bbox("all"),width=200,height=200)
root=Tk()
sizex = 800
sizey = 600
posx = 100
posy = 100
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))
myframe=Frame(root,relief=GROOVE,width=50,height=100,bd=1)
myframe.place(x=10,y=10)
canvas=Canvas(myframe)
frame=Frame(canvas)
myscrollbar=Scrollbar(myframe,orient="vertical",command=canvas.yview)
canvas.configure(yscrollcommand=myscrollbar.set)
myscrollbar.pack(side="right",fill="y")
canvas.pack(side="left")
canvas.create_window((0,0),window=frame,anchor='nw')
frame.bind("<Configure>",myfunction)
data()
root.mainloop()
- 私は正しいことをしているのでしょうか?このコードが私に与えた出力を達成するために、より良い/よりスマートな方法があるのでしょうか?
- なぜ grid メソッドを使用しなければならないのですか?(私はplaceメソッドを試しましたが、どのラベルもキャンバスに表示されません)。
-
何が特別なのでしょうか?
anchor='nw'
を使うのは特別なことですか?
初心者のため、簡単な回答でお願いします。
どのように解決するのですか?
<ブロッククオートこのコードで得られる出力を達成するために、より良い/よりスマートな方法はありますか?
一般的に言えば、はい、あなたは正しいことをしています。Tkinterにはcanvas以外にネイティブのスクロール可能なコンテナがありません。ご覧のとおり、セットアップはそれほど難しくありません。あなたの例が示すように、行の数え方にもよりますが、5、6行のコードで動作します。
"なぜグリッドメソッドを使わなければならないのでしょうか(placeメソッドを試しましたが、どのラベルもキャンバス上に表示されませんでした?)"。
なぜグリッドを使わなければならないのか、というご質問ですね。グリッドを使用する必要はありません。Place、grid、packはすべて使用できます。単に、特定の種類の問題により自然に適しているものがあるというだけです。この場合、実際のグリッド(ラベルの行と列)を作成しているように見えますので、gridが自然な選択です。
"キャンバスにウィンドウを作成するときに anchor='nw' を使用することの何がそんなに特別なのでしょうか?"。
アンカーは、指定された座標にウィンドウのどの部分が配置されるかを示します。デフォルトでは、ウィンドウの中心がその座標に配置されます。上記のコードの場合、左上 ("northwest") の角が座標になるようにしたいのです。
関連
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] Pythonのswitch文の代用品?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] バブルソートの宿題
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] Tkinterでウィジェットグループにスクロールバーを追加する