使用 tkinter库制作行列式计算器

计算引用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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值