新增GUI用户界面,修正了一些小问题
This commit is contained in:
parent
278684310d
commit
3a18d6224e
|
@ -59,8 +59,7 @@ def solve_equation(eq):
|
||||||
try:
|
try:
|
||||||
result = sp.optimize.lsq_linear(matrix, constant, bounds=(0, None)).x.tolist()
|
result = sp.optimize.lsq_linear(matrix, constant, bounds=(0, None)).x.tolist()
|
||||||
except ValueError:
|
except ValueError:
|
||||||
print('无法配平')
|
raise ValueError('无法配平')
|
||||||
return None
|
|
||||||
|
|
||||||
# 将结果写入化学方程式,最后一个生成物的系数需要计算得到
|
# 将结果写入化学方程式,最后一个生成物的系数需要计算得到
|
||||||
last_substance = eq['right'][-1]
|
last_substance = eq['right'][-1]
|
||||||
|
|
69
main.py
69
main.py
|
@ -5,19 +5,68 @@
|
||||||
|
|
||||||
import parser
|
import parser
|
||||||
import equation_solver
|
import equation_solver
|
||||||
|
import tkinter
|
||||||
|
from tkinter import messagebox
|
||||||
|
from ttkbootstrap import Style
|
||||||
|
|
||||||
|
from validity_check import IllegalAtomException
|
||||||
|
|
||||||
# 按间距中的绿色按钮以运行脚本。
|
# 按间距中的绿色按钮以运行脚本。
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
while True:
|
# 新建样式
|
||||||
eq = input('请输入化学方程式:(输入exit退出)')
|
style = Style('flatly')
|
||||||
if eq == 'exit':
|
# 创建窗口
|
||||||
break
|
window = style.master
|
||||||
|
window.title('化学方程式自动配平器')
|
||||||
|
window.geometry('500x140')
|
||||||
|
# 创建输入框
|
||||||
|
input_label = tkinter.Label(window, text='输入方程式:')
|
||||||
|
input_label.place(x=10, y=10)
|
||||||
|
input_entry = tkinter.Entry(window)
|
||||||
|
input_entry.place(x=100, y=10, width=300, height=30)
|
||||||
|
# 创建输出框
|
||||||
|
output_label = tkinter.Label(window, text='输出方程式:')
|
||||||
|
output_label.place(x=10, y=50)
|
||||||
|
output_entry = tkinter.Entry(window)
|
||||||
|
output_entry.place(x=100, y=50, width=300, height=30)
|
||||||
|
# 创建按钮
|
||||||
|
button = tkinter.Button(window, text='配平')
|
||||||
|
button.place(x=420, y=10, width=60, height=70)
|
||||||
|
# 创建菜单
|
||||||
|
menu = tkinter.Menu(window)
|
||||||
|
menu.add_command(label='关于',
|
||||||
|
command=lambda: messagebox.showinfo('关于', '化学方程式自动配平器\n作者:lucas8485\n版本:1.0'))
|
||||||
|
menu.add_command(label='帮助', command=lambda: messagebox.showinfo('帮助', '''输入方程式,点击配平按钮,即可得到配平后的方程式。
|
||||||
|
注意:方程式中的元素必须是化学元素的符号,
|
||||||
|
不能是化学元素的全称,且大小写敏感。
|
||||||
|
如果有分隔符,请不要输入分隔符。'''))
|
||||||
|
window.config(menu=menu)
|
||||||
|
|
||||||
|
# 事件绑定
|
||||||
|
def balance():
|
||||||
|
eq = input_entry.get()
|
||||||
try:
|
try:
|
||||||
eq = parser.parse_equation(eq)
|
parsed_eq = parser.parse_equation(eq)
|
||||||
eq = equation_solver.solve_equation(eq)
|
output_entry.delete(0, 'end')
|
||||||
if eq is not None:
|
except IllegalAtomException:
|
||||||
print('化学方程式:', parser.format_equation(eq))
|
# 弹出错误提示
|
||||||
except Exception as e:
|
tkinter.messagebox.showerror('错误', '输入的方程式有误!')
|
||||||
print(e.args[0])
|
return
|
||||||
|
except ValueError:
|
||||||
|
# 弹出错误提示
|
||||||
|
tkinter.messagebox.showerror('错误', '输入的方程式有误!')
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
balanced_eq = equation_solver.solve_equation(parsed_eq)
|
||||||
|
except ValueError:
|
||||||
|
tkinter.messagebox.showerror('错误', '输入的方程式无法配平!')
|
||||||
|
return
|
||||||
|
output_entry.delete(0, tkinter.END)
|
||||||
|
output_entry.insert(0, parser.format_equation(balanced_eq))
|
||||||
|
|
||||||
|
|
||||||
|
button.bind('<Button-1>', lambda event: balance())
|
||||||
|
# 进入消息循环
|
||||||
|
window.mainloop()
|
||||||
|
|
||||||
# 访问 https://www.jetbrains.com/help/pycharm/ 获取 PyCharm 帮助
|
# 访问 https://www.jetbrains.com/help/pycharm/ 获取 PyCharm 帮助
|
||||||
|
|
14
parser.py
14
parser.py
|
@ -154,12 +154,14 @@ def parse_equation(eq):
|
||||||
:param eq: 化学方程式
|
:param eq: 化学方程式
|
||||||
:return: 化学方程式的字典表示
|
:return: 化学方程式的字典表示
|
||||||
"""
|
"""
|
||||||
eq = eq.replace(' ', '')
|
equation = eq.replace(' ', '')
|
||||||
eq = eq.replace('->', '=')
|
equation = equation.replace('->', '=')
|
||||||
eq = eq.replace('=', '=>')
|
equation = equation.replace('=', '=>')
|
||||||
eq = eq.split('=>')
|
equation = equation.split('=>')
|
||||||
left = eq[0]
|
if len(equation) != 2:
|
||||||
right = eq[1]
|
raise ValueError('化学方程式错误')
|
||||||
|
left = equation[0]
|
||||||
|
right = equation[1]
|
||||||
left = left.split('+')
|
left = left.split('+')
|
||||||
right = right.split('+')
|
right = right.split('+')
|
||||||
left = [parse_molecule(molecule) for molecule in left]
|
left = [parse_molecule(molecule) for molecule in left]
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
numpy~=1.23.5
|
numpy~=1.23.5
|
||||||
scipy~=1.9.3
|
scipy~=1.9.3
|
||||||
|
ttkbootstrap
|
Loading…
Reference in New Issue