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

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

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

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

Q&A

解決済

1回答

1235閲覧

Python Tkinter 電卓を複数表示して同時に動かしたい

patapat

総合スコア5

Tkinter

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

0グッド

0クリップ

投稿2019/11/22 03:13

編集2019/11/22 03:33

pythonのTkinterを使っています。
画面に電卓を複数表示させることはできたのですが、4つ同時に表示させると今度は電卓が表示されるだけで数字が打ち込めずに計算できなくなりました。電卓を4つ表示させ同時に使えるようにするにはどのように改善したらよいでしょうか?
今は下のコードを4つ書き電卓が4つ表示されるようにはなりましたが、同時に電卓の機能を使うことができないです。

発生している問題・エラーメッセージ

電卓を複数表示させることはできるが同時に電卓が使えない

該当のソースコード

``Python Tkinter
from tkinter import *

root = Tk() root.title("Player1") def func(v): var1.set(var1.get() + v) def clear(): var1.set("") def all_clear(): var1.set("") def result(): try: var1.set(eval(var1.get())) except SyntaxError: var1.set("SyntaxError") except ZeroDivisionError: var1.set("ZeroDivisionError") except NameError: var1.set("NameError") var1 = StringVar() label = Label(root, textvariable=var1, fg="#ffffff", bg="#000000", anchor=E, height=2) label.grid(row=0, column=0, columnspan=4, sticky="EW") #1列目 btn_c = Button(root, text="C", command=clear, width=5, height=2) btn_c.grid(row=1, column=2) btn_ac = Button(root, text="AC", command=all_clear, width=5, height=2) btn_ac.grid(row=1, column=3) btn_add = Button(root, text="+", command=lambda: func("+"), width=5, height=2) btn_add.grid(row=2, column=3) #2列目 btn_7 = Button(root, text="7", command=lambda: func("7"), width=5, height=2) btn_7.grid(row=2, column=0) btn_8 = Button(root, text="8", command=lambda: func("8"), width=5, height=2) btn_8.grid(row=2, column=1) btn_9 = Button(root, text="9", command=lambda: func("9"), width=5, height=2) btn_9.grid(row=2, column=2) #3列目 btn_4 = Button(root, text="4", command=lambda: func("4"), width=5, height=2) btn_4.grid(row=3, column=0) btn_5 = Button(root, text="5", command=lambda: func("5"), width=5, height=2) btn_5.grid(row=3, column=1) btn_6 = Button(root, text="6", command=lambda: func("6"), width=5, height=2) btn_6.grid(row=3, column=2) btn_mul = Button(root, text="*", command=lambda: func("*"), width=5, height=2) btn_mul.grid(row=3, column=3) #4列目 btn_1 = Button(root, text="1", command=lambda: func("1"), width=5, height=2) btn_1.grid(row=4, column=0) btn_2 = Button(root, text="2", command=lambda: func("2"), width=5, height=2) btn_2.grid(row=4, column=1) btn_3 = Button(root, text="3", command=lambda: func("3"), width=5, height=2) btn_3.grid(row=4, column=2) btn_sub = Button(root, text="-", command=lambda: func("-"), width=5, height=2) btn_sub.grid(row=4, column=3) #5列目 btn_0 = Button(root, text="0", command=lambda: func("0"), width=5, height=2) btn_0.grid(row=5, column=0) btn_eq = Button(root, text="=", command=result, width=5, height=2) btn_eq.grid(row=5, column=3) root.mainloop()

試したこと

プログラミング初心者なため検索しても有力な情報がなかったため、大きく試していることないので今のところ自分の力では解決するすべなし。

補足情報(FW/ツールのバージョンなど)

Python 3.6.8 shell

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

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

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

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

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

y_waiwai

2019/11/22 03:22

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
magichan

2019/11/22 03:41 編集

現在どのようにして「電卓を複数表示させることはできたかのですが」を実現しているのかをもう少し具体的に記述してください
guest

回答1

0

ベストアンサー

tkinterはあまり詳しくありませんが・・・
同じものを複数作り出すときはクラスを定義するといいです。
トップレベルウィンドウを複数作るなら Toplevel 部品を使うとよさそうです。

rootウィンドウ以外に4つ表示するようにしてみました。
rootウィンドウを閉じると4つとも終了します。
引数selfには、どのウィンドウに対する処理かの情報が渡ってきます。

python

1from tkinter import * 2 3class Calc(Toplevel): 4 def func(self, v): 5 self.var1.set(self.var1.get() + v) 6 7 8 def clear(self): 9 self.var1.set("") 10 11 12 def all_clear(self): 13 self.var1.set("") 14 15 16 def result(self): 17 try: 18 self.var1.set(eval(self.var1.get())) 19 except SyntaxError: 20 self.var1.set("SyntaxError") 21 except ZeroDivisionError: 22 self.var1.set("ZeroDivisionError") 23 except NameError: 24 self.var1.set("NameError") 25 26 27 def __init__(self, title): 28 super().__init__() 29 self.title(title) 30 self.var1 = StringVar() 31 label = Label(self, textvariable=self.var1, fg="#ffffff", bg="#000000", anchor=E, height=2) 32 label.grid(row=0, column=0, columnspan=4, sticky="EW") 33 34 #1列目 35 btn_c = Button(self, text="C", command=self.clear, width=5, height=2) 36 btn_c.grid(row=1, column=2) 37 btn_ac = Button(self, text="AC", command=self.all_clear, width=5, height=2) 38 btn_ac.grid(row=1, column=3) 39 btn_add = Button(self, text="+", command=lambda: self.func("+"), width=5, height=2) 40 btn_add.grid(row=2, column=3) 41 42 #2列目 43 btn_7 = Button(self, text="7", command=lambda: self.func("7"), width=5, height=2) 44 btn_7.grid(row=2, column=0) 45 btn_8 = Button(self, text="8", command=lambda: self.func("8"), width=5, height=2) 46 btn_8.grid(row=2, column=1) 47 btn_9 = Button(self, text="9", command=lambda: self.func("9"), width=5, height=2) 48 btn_9.grid(row=2, column=2) 49 50 #3列目 51 btn_4 = Button(self, text="4", command=lambda: self.func("4"), width=5, height=2) 52 btn_4.grid(row=3, column=0) 53 btn_5 = Button(self, text="5", command=lambda: self.func("5"), width=5, height=2) 54 btn_5.grid(row=3, column=1) 55 btn_6 = Button(self, text="6", command=lambda: self.func("6"), width=5, height=2) 56 btn_6.grid(row=3, column=2) 57 btn_mul = Button(self, text="*", command=lambda: self.func("*"), width=5, height=2) 58 btn_mul.grid(row=3, column=3) 59 60 #4列目 61 btn_1 = Button(self, text="1", command=lambda: self.func("1"), width=5, height=2) 62 btn_1.grid(row=4, column=0) 63 btn_2 = Button(self, text="2", command=lambda: self.func("2"), width=5, height=2) 64 btn_2.grid(row=4, column=1) 65 btn_3 = Button(self, text="3", command=lambda: self.func("3"), width=5, height=2) 66 btn_3.grid(row=4, column=2) 67 btn_sub = Button(self, text="-", command=lambda: self.func("-"), width=5, height=2) 68 btn_sub.grid(row=4, column=3) 69 70 #5列目 71 btn_0 = Button(self, text="0", command=lambda: self.func("0"), width=5, height=2) 72 btn_0.grid(row=5, column=0) 73 74 btn_eq = Button(self, text="=", command=self.result, width=5, height=2) 75 btn_eq.grid(row=5, column=3) 76 77root = Tk() 78calc1 = Calc("#1") 79calc2 = Calc("#2") 80calc3 = Calc("#3") 81calc4 = Calc("#4") 82root.mainloop()

投稿2019/11/24 11:19

編集2019/11/24 11:29
shiracamus

総合スコア5406

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

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

patapat

2019/11/26 06:14

shiracamusさん教えてくださりありがとうございました。おかげで、複数表示で電卓も打てるようになりました!このたびはありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問