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

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

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

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

PyCharm

エディター・開発ツール

Q&A

解決済

1回答

317閲覧

pythonで電卓を作りたいです。

wadango

総合スコア1

Python

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

PyCharm

エディター・開発ツール

0グッド

0クリップ

投稿2024/02/05 23:21

実現したいこと

Entryウィジェットが二つあるのですがどちらもボタンで入力できるようにしたいです。
また改善点がある場合は教えていただきたいです。

前提

pythonを学習し始めて2週間ほどなので正しくコードがかけていないかもしれません。プログラミングも学校で少し習った程度なのでよければお知恵をお貸しください。
勉強のために微積分と解析の電卓を作っていて、まだ画面に表示するソースコードを書いてる段階です。今後計算をするプログラムを書こうと思っているのですが、微積分などが得意なライブラリも教えてもらいたいです。

class transは今後別の画面に遷移した時に使う予定です。

該当のソースコード

import tkinter as tk from tkinter import ttk root = tk.Tk() root.geometry('400x500') root.title('微積分と解析') BUTTON = [ ['7', '8', '9', '%', 'sin', '(', 'log'], ['4', '5', '6', '*', 'cos', ')', 'e'], ['1', '2', '3', '-', 'tan', '^', '∞'], ['0', ',', '/', '+', 'C', 'B', '√'] ] SYMBOL = ['+', '-', '*', '/', '%', '^', 'log', 'e', '∞'] class trans: def show_screen_limit(self): screen_limit.pack() class CaluGui: def __init__(self): self.calc_str = '' #Calc_buttonのframeを定義 button_frame = ttk.Frame(width=300, height=400) button_frame.propagate(False) button_frame.pack(side=tk.BOTTOM) self.calc_var = tk.StringVar() self.calc_label = tk.Label(entry, textvariable=self.calc_var, font=("", 15)) self.calc_label.pack(anchor=tk.W) for y, row in enumerate(BUTTON, 1): for x, num in enumerate(row): button = tk.Button(button_frame, text=num, font=('', 12), width=5, height=3) button.grid(row=y, column=x) button.bind('<Button-1>', self.click_button) def click_button(self, event): check = event.widget['text'] if check == 'C': self.calc_str = '' elif check == 'B': self.calc_str = self.calc_str[:-1] else: self.calc_str += check self.calc_var.set(self.calc_str) screen_limit = tk.Frame(root) screen_limit.pack() label = tk.Label(screen_limit, text="式を入力してください") label.pack() entry = tk.Entry(screen_limit) entry.propagate(False) entry.pack() label = tk.Label(screen_limit, text="xをどこに飛ばすか入力してください:") label.pack() entry1 = tk.Entry(screen_limit) entry1.propagate(False) entry1.pack() Calubutton = CaluGui() trans() root.mainloop()

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

バージョンはpython3.12.1
Pycharmを使用しています

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

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

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

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

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

y_waiwai

2024/02/06 04:30

現状のコードでどういう不具合があって、それをどういうふうにしたいのか説明しましょう 問題が見えません
TakaiY

2024/02/07 01:28

解決済みなのであれですが、 > 微積分などが得意なライブラリ 少し検索すれば SymPyが出てくると思いますが、他のものを探していますか? SymPyにどのような問題がありますか?
guest

回答1

0

ベストアンサー

まずは修正イメージはこんな感じだと思います。

  1. 下の方で定義しているラベルとエントリは、CaluGuiの中に入れる
    相互に関連している部品なので、同じところにあったほうがよい。 エントリにはインスタンス変数を割り当てておく

  2. エントリ2つには、ラベルでしているように、それぞれに別のtk.StringVarを割り当てる。
    ボタンで押した値を入れるために必要

  3. ボタンを押したときの処理の中で、フォーカスがに当っている方のエントリに割り当てられているStringVarを変更するようにする。
    フォーカスの当っている部品は、focus_get()メソッドで取得できます。

とりあえずこんな感じでできるでしょう。

投稿2024/02/06 08:22

TakaiY

総合スコア12783

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

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

wadango

2024/02/06 19:04

回答ありがとうございます。 試したところ問題が解決しました! 本当に助かりました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問