###概要
GUIプログラム関係で困っていることが有ります。助けてください。
画面の拡大と同時に伸縮率に合わせてテキストボックスとスクロールバーの大きさを変更したいです。
誰かご教授頂けませんか。
tkinterを利用して以下のコードを作りました。
Python
1import tkinter as tk 2 3root = tk.Tk() 4root.geometry("300x300") 5 6canvas = tk.Canvas(root) 7canvas.pack() 8 9scrollbar = tk.Scrollbar(canvas) 10scrollbar.pack(side=tk.RIGHT,fill="y") 11text = tk.Text(canvas,width=10,height=10) 12text.pack(side=tk.LEFT) 13text["yscrollcommand"] = scrollbar.set 14 15root.mainloop()
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
伸縮を可能にするには pack に fill, expand オプションを指定しますが、
問題点:
- Canvas 上に配置する方法
通常、キャンバス内アイテムとして配置する際は canvas.create_window を用います。
- 固定サイズ (width/height 指定)
伸縮をレイアウトマネージャ(pack, grid) に任せる場合、
width, height 指定は相反する設定なので、
自動で調整される値に上書きされます。
確認点: Text ウィジェットはキャンバス内に配置する必要はありますか?
もし、同時にキャンバスの操作も行いたい場合はもう少し複雑で
独自にリサイズイベントで調整する必要が出てきます。
そうでない場合、テキストとスクロールバーを配置する入れ物として利用する場合
Frame の方が適切です。
標準ライブラリ内に tkinter.scrolledtext.ScrolledText があります。
python
1 2import tkinter as tk 3from tkinter.scrolledtext import ScrolledText 4 5root = tk.Tk() 6root.geometry("300x300") 7text = ScrolledText(root) 8text.pack(fill=tk.BOTH, expand=tk.YES) 9root.mainloop()
Frame に配置する場合の例。
ScrolledText の実装が参考になります。短いコードなので
https://github.com/python/cpython/blob/3.9/Lib/tkinter/scrolledtext.py
python
1import tkinter as tk 2 3 4root = tk.Tk() 5root.geometry("300x300") 6 7frame = tk.Frame(root) 8frame.pack(fill=tk.BOTH, expand=True) 9 10text = tk.Text(frame) 11vbar = tk.Scrollbar(frame, orient=tk.VERTICAL) 12text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) 13vbar.pack(side=tk.RIGHT, fill=tk.Y, expand=False) 14text["yscrollcommand"] = vbar.set 15vbar["command"] = text.yview 16 17root.mainloop()
もし、伸縮率に合わせて「固定サイズの」ウィジェットの大きさを変更したい場合
<Configure>
イベントでウィンドウがリサイズされた時に独自に調整。
python
1def onResize(e): 2 # ※ 但し、textウィジェットのwidth,height は文字数指定な点に注意 3 # 設定しているフォントサイズにより大きさは異なります。 4 5 if e.widget is root: 6 text.config(width=e.width//20, height=e.height//20) 7 8root.bind("<Configure>", onResize) 9
投稿2021/04/05 04:15
総合スコア8681
0
おはようございます。
問題文読ませていただきました。
こんな感じでいかがでしょうか?
python
1import tkinter as tk 2 3class Application(tk.Frame): 4 def __init__(self, master=None): 5 # Windowの初期設定を行う。 6 super().__init__(master) 7 8 # Windowの画面サイズを設定する。 9 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/ 10 self.master.geometry("300x300") 11 12 # Windowを親要素として、frame Widget(Frame)を作成する。 13 # Frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/ 14 frame = tk.Frame(self.master) 15 16 # Windowを親要素とした場合に、frame Widget(Frame)をどのように配置するのか? 17 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 18 frame.pack(fill=tk.BOTH, expand=True) 19 20 # 1. text Widgetの作成 21 # frame Widget(Frame)を親要素として、text Widgetを作成する。 22 # height : 高さを設定 23 # Textについて : https://kuroro.blog/python/bK6fWsP9LMqmER1CBz9E/ 24 text = tk.Text(frame, height=4) 25 26 # 2. scrollbar Widgetの作成 27 # frame Widget(Frame)を親要素として、scrollbar Widgetを作成する。 28 # orient option : 垂直scrollbarを作成するため、tk.VERTICALを設定。水平scrollbarの場合は、tk.HORIZONTALを設定する。 29 # command option : scrollbar Widgetを動かした場合に、連動して表示する内容を設定。今回は、text Widgetをy軸方向へ動かした内容を表示する。 30 scrollbar = tk.Scrollbar(frame, orient=tk.VERTICAL, command=text.yview) 31 32 # 3. scrollbar Widgetをtext Widgetに反映する 33 # scrollbar Widgetの設定内容をtext Widgetと紐付ける。 34 # yscrollcommand : text Widget内で上下移動した場合に、scrollbarが追従するように設定する。 35 text["yscrollcommand"] = scrollbar.set 36 37 # 4. text Widget, scrollbar Widgetを配置 38 # frame Widget(Frame)を親要素とした場合に、text Widgetをどのように配置するのか? 39 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 40 text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) 41 # frame Widget(Frame)を親要素とした場合に、scrollbar Widgetをどのように配置するのか? 42 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 43 scrollbar.pack(side=tk.RIGHT, fill=tk.Y) 44 45# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program 46if __name__ == "__main__": 47 root = tk.Tk() 48 app = Application(master=root) 49 # Windowをループさせて、継続的にWindow表示させる。 50 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/ 51 app.mainloop()
ご確認のほど、よろしくお願いいたします。????♂️
またscrollbarのoptionやtext Widget以外へscrollbarを取り付ける方法を、以下の記事でまとめましたので、ご確認いただけますと幸いです。
・Tkinterで使われるscrollbarとは?活用事例を交えて徹底解説
投稿2021/07/10 23:57
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/05 05:22