PythonGUIシミュレーション実装計算機

Pythonは参考のために計算機を作成します。具体的な内容は次のとおりです。

(1)計算機のインターフェースは次のとおりです。

(2)基本的に計算機のすべてのニーズを満たします。使用する場合、キーボード入力は許可されず、マウスの左ボタンをクリックすることによってのみ実行できます。最初は0.0が表示され、毎回入力された内容はD:\ num.txt(プログラム起動時に自動作成)に保存されます。

(3)「AC」レコードはクリアされて最初の0.0に戻ります。「delete」は前の入力を削除します。「+/-」は正の数を負の数に変換し、負の数は正の数になります。

(4)異なる16進値システムでは、10進の正確な値が異なります。
したがって、コンピューターは0.1 + 0.2 = 0.3000000000004と表示されます。
データを切り捨てることができ、問題を解決できますが、精度が失われます。
(このコンピューターは切り捨てられません)

import tkinter,os
from tkinter import*
def temp(string):#空白の間隔
temp=tkinter.Frame(string,width=20,height=50)
temp.pack()
flag=0
node=0
def num_work():   #表示ボックスLableを更新します
global flag
global node
withopen("D:\\num.txt")as f:for length in f:
string=length
top_work.configure(text=string.strip('\n'))  #ラベルテキストをリセット
root.after(500,num_work) #0ごと.5秒は関数numを呼び出します_仕事自体が結果を得る
def num_math_int(num1,num2):#整数演算
try:if num2[0]=='+':
string=int(num1)+int(num2[1:])
elif num2[0]=='-':
string=int(num1)-int(num2[1:])
elif num2[0]=='x':
string=int(num1)*int(num2[1:])
elif num2[0]=='/':
string=int(num1)/int(num2[1:])withopen("D:\\num.txt",'a')as f:
f.write('\n'+str(string)+'\n')
except:withopen("D:\\num.txt",'a')as f:
f.write('\nエラー')
def num_math_float(num1,num2):#10進計算
try:if num2[0]=='+':
string=float(num1)+float(num2[1:])
elif num2[0]=='-':
string=float(num1)-float(num2[1:])
elif num2[0]=='x':
string=float(num1)*float(num2[1:])
elif num2[0]=='/':
string=float(num1)/float(num2[1:])if flag==0:withopen("D:\\num.txt",'a')as f:
f.write('\n'+str(string)+'\n')else:withopen("D:\\num.txt",'a')as f:
f.write('\n'+str(string))
except:withopen("D:\\num.txt",'a')as f:
f.write('\nエラー')
def decimal(num):if num.count('%')0:
num=num.replace('%','')
num=num.replace('\n','')if num.isnumeric():
num=str(float(num)/100)else:
num=num[0]+str(float(num[1:])/100)return num
def work(string):#ボタンの対応する機能
if string.isnumeric():withopen("D:\\num.txt","a")as file:
file.write(string)else:
# ファイルDを読み取る:\\num.すべてのコンテンツをtxt
lists=[]withopen("D:\\num.txt","r")as file:for length in file:
lists.append(length)if string=='AC':withopen("D:\\num.txt","w")as file:
file.write('0.0\n')
elif string=='=':
num1=lists[-2]
num2=lists[-1]if num1=='\n':#終わりが新線である状況を解決する
num1=lists[-3]
# パーセンテージを10進数化する
# さらに0件の結果.0000000001
num1=decimal(num1)
num2=decimal(num2)try:      #2つの数値が整数か小数かを判別する
number=int(num1)
number=int(num2[1:])num_math_int(num1,num2)#2つの数値に対する整数演算
except:num_math_float(num1,num2)#10進演算用の2つの数値
elif string=='.':if lists[-1].count('.')==0:#末尾に小数点があるかどうかを確認します。そうでない場合、エラーが報告されます
withopen("D:\\num.txt","a")as file:
file.write(string)else:withopen("D:\\num.txt","a")as file:
file.write('\nエラー')
elif string=='+/-':if lists[-1].count('-')==0:#-+にとって-if lists[-1].count('+')==1:
lists[-1]=lists[-1].replace('+','')
lists[-1]='-'+lists[-1]else:           #--にとって+
lists[-1]=lists[-1].replace('-','+')
# ファイルの更新
withopen("D:\\num.txt","w")as file:
pass
for length in lists:withopen("D:\\num.txt","a")as file:
file.write(length)
elif string=='delete':
number=lists[-1]
lists[-1]=number[0:(len(number)-1)]#1つ削除する
# ファイルの更新
withopen("D:\\num.txt","w")as file:
pass
for length in lists:withopen("D:\\num.txt","a")as file:
file.write(length)
elif string=='%':if lists[-1].endswith("%")==False:withopen("D:\\num.txt","a")as file:
file.write(string)else:withopen("D:\\num.txt","a")as file:
file.write('\nエラー')else:withopen("D:\\num.txt","a")as file:
file.write('\n'+string)
def run():#計算機表示インターフェース本体
if os.path.exists("D:\\num.txt")==False:withopen("D:\\num.txt",'w')as f:
f.write('0.0\n')
global root#グローバル変数ルートを定義する,ラベルの更新を容易にする
root=tkinter.Tk()
root.title("電卓")
# x = root.winfo_screenwidth()
# 現在の画面の幅を取得します
# y = root.winfo_screenheight()
# 現在の画面の高さを取得します
# print(((x-500)//2),((y-600)//2))#センタリング用に提供されたパラメータ
root.geometry('400x500+760+290')#本体は長さ400、高さ500、中央
top=tkinter.Frame(root,width=20,height=50)
top.pack()
global top_work#グローバル変数ルートを定義する
temp(top)#空白の間隔
# 計算機表示ボックス
top_work=tkinter.Label(top,text='',justify='left',relief=SUNKEN,bd=10,bg='white',width=40)
top_work.pack(side='bottom')#計算機表示フレーム(下部の位置)
num_work()temp(root)#空白の間隔
number=tkinter.Frame(root)#コンピュータキーボードのコンテナに
number.pack()
# すべてのキー、例としてACキー
numberAC=tkinter.Button(number,text="AC",width=10,command=lambda :work('AC')).grid(row=0,column=0)
# 左クリックで機能作業を実行
# ボタンの位置(0,0)
numberdelete=tkinter.Button(number,text="delete",width=10,command=lambda :work('delete')).grid(row=0,column=1)
numberzhengfu=tkinter.Button(number,text="+/-",width=10,command=lambda :work('+/-')).grid(row=0,column=2)
numberchu=tkinter.Button(number,text="/",width=10,command=lambda :work('/')).grid(row=0,column=3)
tkinter.Button(number,text="7",width=10,command=lambda :work('7')).grid(row=1,column=0)
tkinter.Button(number,text="8",width=10,command=lambda :work('8')).grid(row=1,column=1)
tkinter.Button(number,text="9",width=10,command=lambda :work('9')).grid(row=1,column=2)
tkinter.Button(number,text="x",width=10,command=lambda :work('x')).grid(row=1,column=3)
tkinter.Button(number,text="4",width=10,command=lambda :work('4')).grid(row=2,column=0)
tkinter.Button(number,text="5",width=10,command=lambda :work('5')).grid(row=2,column=1)
tkinter.Button(number,text="6",width=10,command=lambda :work('6')).grid(row=2,column=2)
tkinter.Button(number,text="-",width=10,command=lambda :work('-')).grid(row=2,column=3)
tkinter.Button(number,text="1",width=10,command=lambda :work('1')).grid(row=3,column=0)
tkinter.Button(number,text="2",width=10,command=lambda :work('2')).grid(row=3,column=1)
tkinter.Button(number,text="3",width=10,command=lambda :work('3')).grid(row=3,column=2)
tkinter.Button(number,text="+",width=10,command=lambda :work('+')).grid(row=3,column=3)
tkinter.Button(number,text="%",width=10,command=lambda :work('%')).grid(row=4,column=0)
tkinter.Button(number,text="0",width=10,command=lambda :work('0')).grid(row=4,column=1)
tkinter.Button(number,text=".",width=10,command=lambda :work('.')).grid(row=4,column=2)
tkinter.Button(number,text="=",width=10,command=lambda :work('=')).grid(row=4,column=3)
root.mainloop()if __name__=='__main__':run()

以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。

Recommended Posts

PythonGUIシミュレーション実装計算機
pythonでguiを書く
Python描画ローズ実装コード
gomokuプログラムのPython実装
Pythontelnetログイン関数の実装コード
Pythonプラグインメカニズムの詳細な実装
pythonリストの逆トラバーサルの実装
IOU計算ケースのPython実装
word2vec操作のPython予備実装
FMアルゴリズム分析とPython実装
pythonselenium操作cookieの実装
PythonATM関数の実装コード例
地主取引のPythonシミュレーション
Pythonクローラーのスクレイピーシミュレーションログイン
python3登録グローバルホットキーの実装
python学生管理システムの実装
python勾配降下アルゴリズムの実装