質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

textbox

HTMLの<input type="text">で生成されるtextboxに関するタグです。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

17120閲覧

tkinter画面の伸縮と同時にTextboxの大きさを変更したい

akisan55

総合スコア49

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

textbox

HTMLの<input type="text">で生成されるtextboxに関するタグです。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

1クリップ

投稿2021/04/05 03:27

###概要
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()
sntan👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

teamikl

総合スコア8760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akisan55

2021/04/05 05:22

有難うございます。 無事解決しました。 助かりました。
guest

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

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問