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

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

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

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

Python

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

Q&A

解決済

2回答

3087閲覧

pythonで、tkinter.text()に入力した端の方の文章が見切れてしまう

退会済みユーザー

退会済みユーザー

総合スコア0

Tkinter

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

Python

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

0グッド

0クリップ

投稿2021/07/10 11:14

編集2021/07/10 11:20

前提・実現したいこと

pythonで、基本的な機能(保存、開く、文章の編集、等)の入った、html等を扱うテキストエディタを作っています。
ソースコードは、ネットのブログを参照させていただきました。
問題点はタイトルの通り、tkinter.text()の書いた文章の端の方の表示が見切れてしまいます。
イメージ説明
↑スクロールバーが作動していない時は普通に表示されますが....

![イメージ説明]イメージ説明
↑文章が長くなってくると、たちまち端の2~3文字が見切れてしまいます。(見切れている部分には本来</p>が入っています)スクロールバーを動かそうとしても、これ以上動かすことができません。
この「文章の端が見切れてしまう」現象を解決する方法をご教授いただきたいです。
よろしくお願いします。
###エラーメッセージ
エラーメッセージ等は特にありませんでした。

該当のソースコード

python

1import tkinter as tk 2import tkinter.font as font 3import os 4import ctypes 5try: 6 ctypes.windll.shcore.SetProcessDpiAwareness(True) 7except: 8 pass 9 10from tkinter.filedialog import askopenfilename 11 12 13root = tk.Tk() 14my_font = font.Font(root,family = "MS Gothic") 15 16def new_text(): 17 import pathlib 18 19 file = pathlib.Path("..\writed_file") 20 file.touch() 21 22def open_text(): 23 typ = [('html Files', '*.html;*.css;*.js')] 24 filepath = askopenfilename(filetypes=typ) 25 if not filepath: 26 return 27 text_widget.delete('1.0', tk.END) 28 with open(filepath, "r", encoding="utf-8") as open_file: 29 text = open_file.read() 30 text_widget.insert(tk.END, text) 31 root.title(f'Text Files - {filepath}') 32 33### 34def naming_file_save(): 35 from tkinter.filedialog import asksaveasfilename 36 typ = [('html Files', '*.html;*.css;*.js')] 37 filepath = asksaveasfilename(defaultextension="txt",filetypes=typ) 38 if not filepath: 39 return 40 with open(filepath, "w") as save_file: 41 text = text_widget.get("1.0", tk.END) 42 save_file.write(text) 43 root.title(f"Text Editor - {filepath}") 44 45 46def btn_click(): 47 t1, t2 = txt_1.get(), txt_2.get() 48 if t1[-1] == '/': 49 pass 50 else: 51 t1 += '/' 52 file_pass = t1 + t2 53 text = text_widget.get('1.0','end -1c') 54 f = open(file_pass, 'w') 55 f.write(text) 56 f.close() 57 58text_widget = tk.Text(root,wrap = tk.NONE,font = my_font) 59text_widget.place(width=1600,height=970,x=320,y=0) 60root.columnconfigure(0, weight = 1) 61root.rowconfigure(0, weight = 1) 62 63yscroll = tk.Scrollbar(text_widget, command=text_widget.yview) 64xscroll = tk.Scrollbar(text_widget, command=text_widget.xview, orient=tk.HORIZONTAL) 65yscroll.pack(side=tk.RIGHT, fill = "y") 66xscroll.pack(side=tk.BOTTOM, fill = "x") 67text_widget['yscrollcommand'] = yscroll.set 68text_widget['xscrollcommand'] = xscroll.set 69 70menubar = tk.Menu(root, font = my_font) 71 72filemenu = tk.Menu(menubar, tearoff=0) 73filemenu.add_command(label = "新規(N)",command = new_text) 74filemenu.add_command(label = "開く(O)...",command = open_text) 75filemenu.add_command(label = "上書き保存(S)") 76filemenu.add_command(label = "名前を付けて保存(A)...", command = naming_file_save) 77filemenu.add_separator() 78filemenu.add_command(label = "ページ設定(U)...") 79filemenu.add_command(label = "印刷(P)...") 80filemenu.add_separator() 81filemenu.add_command(label = "終了(X)", command = root.quit) 82menubar.add_cascade(label = "ファイル(F)", menu = filemenu) 83 84editmenu = tk.Menu(menubar, tearoff=0) 85editmenu.add_command(label = "None") 86menubar.add_cascade(label = "編集(E)", menu = editmenu) 87 88formatmenu = tk.Menu(menubar, tearoff = 0) 89formatmenu.add_command(label = "None") 90menubar.add_cascade(label = "書式(O)", menu = formatmenu) 91 92viewmenu = tk.Menu(menubar, tearoff = 0) 93viewmenu.add_command(label = "None") 94menubar.add_cascade(label = "表示(V)", menu = viewmenu) 95 96helpmenu = tk.Menu(menubar, tearoff = 0) 97helpmenu.add_command(label = "None") 98menubar.add_cascade(label = "ヘルプ(H)", menu = helpmenu) 99 100root.config(menu = menubar) 101 102root.title("test") 103root.geometry("1500x750") 104root.state("zoomed") 105root.mainloop()

試したこと

フォントが駄目なのかなと思い、変更したり、特に設定をせずに実行してみたりしました。
ですが、どれも成功しませんでした。

補足情報

開発環境:atom エディタです。

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

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

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

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

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

guest

回答2

0

python

1import tkinter as tk 2 3root = tk.Tk() 4text = tk.Text(root, wrap=tk.NONE) 5text.grid(row=0, column=0, sticky=tk.NSEW) 6hbar = tk.Scrollbar(root, command=text.xview, orient=tk.HORIZONTAL) 7hbar.grid(row=1, column=0, sticky=tk.NSEW) 8text.config(xscrollcommand=hbar.set) 9root.grid_columnconfigure(0, weight=1) 10root.grid_rowconfigure(0, weight=1) 11root.mainloop()

で問題は再現しますか?おそらくレイアウトの問題だと思いますが
気になる点は、

text_widget.place(width=1600,height=970,x=320,y=0)

テキストウィジェットのレイアウトが自動管理されず固定値なので、
ウィジェット自体が見切れている状態です。→ ウィンドウ横幅をリサイズし広げると解ると思います。

解決策: pack もしくは grid のどちらかで、伸縮可能なオプションを使いましょう。
(スクロールバーをpackで配置してるので、この場合は pack)

再利用しやすいように、クラスに纏めておくのも手で
標準ライブラリ内のスクロール・テキストウィジェットは横スクロールには対応してませんが、
20行程度のコードなので、改良する際のベースに丁度良さそうです。

参考: tkinter.scrolledtext --- スクロールするテキストウィジェット [source code]

投稿2021/07/10 12:15

teamikl

総合スコア8760

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

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

退会済みユーザー

退会済みユーザー

2021/07/11 04:14

回答ありがとうございます!こちらのコードも参考にさせていただきます。
guest

0

ベストアンサー

すみませんできました????‍♀️
どうやらText()にスクロールバーを配置していたのが悪かったようで、メイン画面のrootに配置して、Text()の位置を上手く調整してあげたらできました!お騒がせして申し訳ありませんでした!
一応コード貼っときます(大部分を省略)↓

python

1 2text_widget = tk.Text(root,wrap = tk.NONE,font = my_font) 3text_widget.place(width=1600,height=970,x=305,y=0)###ここの位置を調整 4root.columnconfigure(0, weight = 1) 5root.rowconfigure(0, weight = 1) 6 7yscroll = tk.Scrollbar(root, command=text_widget.yview,orient=tk.VERTICAL) 8xscroll = tk.Scrollbar(text_widget, command=text_widget.xview, orient=tk.HORIZONTAL) 9yscroll.pack(side=tk.RIGHT, fill = "y")###Yのスクロールバーをメインウィンドウのrootの右端に配置 10xscroll.pack(side=tk.BOTTOM, fill = "x") 11text_widget['yscrollcommand'] = yscroll.set 12text_widget['xscrollcommand'] = xscroll.set

投稿2021/07/10 11:30

編集2021/07/10 11:32
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問