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

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

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

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

Python

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

Q&A

解決済

1回答

1253閲覧

Python:(TkInter) ダイアログ上のWidgetへ値設定を対応しているが 格納されない

saya24

総合スコア222

Tkinter

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

Python

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

0グッド

0クリップ

投稿2020/05/12 03:59

毎日すみません。

ダイアログ上のScrolledTextに ボタン押下から発火される関数で 値を格納しているつもりなのですが、画面に現れてきません。
試しにget()で内容を取得し ソレをメッセージボックスに表すようにしてみたのですが やはり値は格納されていないようです。

ダイアログ側のWidgetをうまく制御できていない、ということでしょうか?
画面をリフレッシュするような措置が必要なのでしょうか?
問題点をご指摘頂けますと幸いです、よろしくお願いします。

ちなみにSyntaxエラーは生じていません(ボタン押下すると空のメッセージボックスが表示される)

Python

1from tkinter import * 2import tkinter.ttk as ttk 3import tkinter.messagebox as tkMB 4import tkinter.scrolledtext as tksc 5import math 6 7def openDialog1(self): 8 9 self.dialog = Toplevel(self) 10 self.dialog.title("Script Menu") 11 12 #フォームサイズを実行端末から導き、ド真中に配置表示 13 lw = math.ceil(ww * 0.408) 14 lh = math.ceil(wh * 0.477) 15 self.dialog.geometry(str(lw)+"x"+str(lh)+"+"+str(int(ww/2-lw/2))+"+"+str(int(wh/2-lh/2)) ) 16 17 self.dialog.configure(menu=menu_top, bg="#F0FFFF") 18 self.dialog.resizable(0,0) 19 self.dialog.protocol('WM_DELETE_WINDOW', (lambda: 'pass')()) 20 21 # modalに 22 self.dialog.grab_set() 23 24 25 # ★ボタン★ 26 btn1 = Button(self.dialog, text='Execute', width=10, command=self.test) 27 btn1.grid(row=2, columnspan=11, pady=(0, 20)) 28 29 30 # ★スクロールドテキスト★ 31 self.scrtxt2 = tksc.ScrolledText(self.dialog, bg="silver", font=("Helvetica",11), state=DISABLED) 32 self.scrtxt2.grid(row=3, column=0, columnspan=11, sticky=W+E, padx=10)

Python

1def test(self): 2 self.scrtxt2.insert('end', 'Hello!') 3 tkMB.showinfo('結果',self.scrtxt2.get('1.0', 'end -1c'))

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

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

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

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

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

guest

回答1

0

ベストアンサー

コードはクラスの一部でしょうか?実行できませんでしたが
入力が有効でない原因は、state=DISABLED の為です。

self.scrtxt2 = tksc.ScrolledText(self.dialog, bg="silver", font=("Helvetica",11), state=DISABLED)

stateを切り替える必要があります。

python

1 def test(self): 2 try: 3 self.scrtxt2.config(state=NORMAL) 4 self.scrtxt2.insert('end', 'Hello!') 5 finally: 6 self.scrtxt2.config(state=DISABLED)

キー入力の処理とは関数単位で切り替わるので、
NORMALになった瞬間にキー入力が有効になるのではといった心配はありません。

try/finallyは省略可能ですが、途中でエラーになり
state=DISABLEが再設定されないケースには注意。


DISABLED が readonly を意図しての設定なら、
state=DISABLEDではなく、他にキー入力だけを無効にする方法もあります。

python

1self.scrtxt2.bind("<Key>", lambda e: "break")

投稿2020/05/12 04:32

teamikl

総合スコア8664

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

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

saya24

2020/05/12 04:43 編集

teamikiさん 抜粋した投稿をしてすみません。 DISABLEだと設定できないのですね、初歩的なを問い合わせてすみません。 ReadOnlyで十分です。
saya24

2020/05/12 04:51

ReadOnlyにする方法まで教えて頂き ありがとうございました。 只今自分でも調べて、任意のキーをbreak関数に指定する手立てで対処できることを学びました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問