73 lines
2.7 KiB
Python
73 lines
2.7 KiB
Python
# 这是一个示例 Python 脚本。
|
||
|
||
# 按 ⌃R 执行或将其替换为您的代码。
|
||
# 按 双击 ⇧ 在所有地方搜索类、文件、工具窗口、操作和设置。
|
||
|
||
import parser
|
||
import equation_solver
|
||
import tkinter
|
||
from tkinter import messagebox
|
||
from ttkbootstrap import Style
|
||
|
||
from validity_check import IllegalAtomException
|
||
|
||
# 按间距中的绿色按钮以运行脚本。
|
||
if __name__ == '__main__':
|
||
# 新建样式
|
||
style = Style('flatly')
|
||
# 创建窗口
|
||
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:
|
||
parsed_eq = parser.parse_equation(eq)
|
||
output_entry.delete(0, 'end')
|
||
except IllegalAtomException:
|
||
# 弹出错误提示
|
||
tkinter.messagebox.showerror('错误', '输入的方程式有误!')
|
||
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 帮助
|