计算引用numpy库
界面使用tkinter库
新手练习题:案例有少量bug,未解决
import tkinter as tk
#import numpy as np#减少引入函数量
from numpy import linalg
import tkinter.messagebox as mb
window=tk.Tk()
window.title('行列式计算器')
window.geometry('320x190')#('270x170')
order_l=tk.Label(window,text='输入行列式的阶数:')
order_l.grid(row=1,column=1)
order_en=tk.Entry(window,width=8,show=None)#.grid()后缀在后面是get函数失灵??
order_en.grid(row=1,column=2)
ruslut_l=tk.Label(window)
createVar=locals()#多变量生成
def get_order():#函数先声明,后用按钮调用 创建输入框
global orde
su=order_en.get()
if su.isdigit():#判断输入阶数格式
var=int(order_en.get())
if var >= 4:#适配窗口大小
tall=170+(var-3)*30
wi=270+(var-3)*73
window.geometry(str(wi)+'x'+str(tall))
orde=var#阶数赋值
for i in range (var):
for j in range (var):
createVar['num_'+str(i)+str(j)]=tk.Entry(window,width=8,show=None)
createVar['num_'+str(i)+str(j)].grid(row=i+2,column=j+1,padx=10,pady=5)
count_bu.grid(row=var+2,column=1)#计算按钮位置
ruslut_l.grid(row=var+2,column=2)#结果位置
delete_bu.grid(row=var+2,column=3)#清空数据位置
order_bu.config(text='确认新的阶数',command=another_order)#改变生成输入框的函数
order_l.config(text='输入新的阶数')
else:
mb.showinfo('别开玩笑','输入正确格式')
def another_order():
global orde
for i in range (orde):
for j in range (orde):
createVar['num_'+str(i)+str(j)].grid_forget()#删除第一生成的输入框
su=order_en.get()
if su.isdigit():#判断二次输入阶数格式
var=int(order_en.get())#获取新的阶数
if var >= 4:#二次适配窗口大小
tall=170+(var-3)*30
wi=270+(var-3)*73
window.geometry(str(wi)+'x'+str(tall))
else:
window.geometry('270x170')
for i in range (var):
for j in range (var):
createVar['num_'+str(i)+str(j)]=tk.Entry(window,width=8,show=None)
createVar['num_'+str(i)+str(j)].grid(row=i+2,column=j+1,padx=10,pady=5)
count_bu.grid(row=var+2,column=1)#计算按钮位置
ruslut_l.grid(row=var+2,column=2)#结果位置
delete_bu.grid(row=var+2,column=3)#清空数据位置
else:
mb.showinfo('别开玩笑','输入正确格式')
orde=int(order_en.get())#更新阶数不然删除的阶数还是初始的(删的少了)
def de ():#清除数据
var=int(order_en.get())
for i in range (var):
for j in range (var):
createVar['num_'+str(i)+str(j)].delete(0,5)
def count():#进行赋值、判断和计算
do_c=1#是否进行计算
all_num=[]
var=int(order_en.get())
for i in range (var):
num_child=[]#重新定义变量 避免变量污染
for j in range (var):
num_child.append(createVar['num_'+str(i)+str(j)].get())
all_num.append(num_child)
for i in range(var): #判断输入数据
tiny=[]
tiny=all_num[i]
for j in range(var):
if tiny[j].isdigit():
continue
else:
out_alarm='第'+str(i+1)+'行,第'+str(j+1)+'列。输入格式不对'
mb.showinfo('别开玩笑',out_alarm)
do_c=0#输入数控有误
if do_c==1:
all_num=[]
for i in range (var):
num_child=[]#重新定义变量 避免变量污染
for j in range (var):
num_child.append(int(createVar['num_'+str(i)+str(j)].get()))
all_num.append(num_child)
ruslut=round(linalg.det(all_num))
ruslut_l.config(text=str(ruslut))
order_bu=tk.Button(window,text='点击确认阶数',command=get_order)
order_bu.grid(row=1,column=3)
count_bu=tk.Button(window,text='计算',command=count)
delete_bu=tk.Button(window,text='清空数字',command=de)
window.mainloop()