利用python tkinter库实现GUI方阵计算器

学习了tkinter后一直想做一个东西,就尝试了方阵计算器

实现代码

# # # 矩阵计算器
from tkinter import *

m1 = []
m2 = []

def main():
    n = DisplayMainwindowAndGetNumber()
    newwindow(n)
    mlist = calculate(n)
    displayTheAnswer(n, mlist)
  

def DisplayMainwindowAndGetNumber():
    def pp():
        window.destroy()
    window = Tk()
    window.title('Matrix Calculation')
    ntext = StringVar()
    lb = Label(window, text='Enter the n:')
    lb.grid(row=0, column=0, padx=5, pady=5)
    ent = Entry(window, width=15, textvariable=ntext)
    ent.grid(row=0, column=1, padx=5, pady=5)
    bnt = Button(window, text='Enter', command=pp)
    bnt.grid(row=1, column=0, columnspan=2, pady=10)
    window.mainloop()
    return eval(ntext.get())


def newwindow(n):
    newwindow = Tk()
    newwindow.title('Enter Process')
    def pp():  
        newwindow.destroy() 
    global m1
    global m2
# 获取输入控件来表示矩阵1
    for i in range(n):
        line = []
        for j in range(n):
            temporarytext1 = StringVar()
            ent = Entry(newwindow, width=3, textvariable=temporarytext1)
            ent.grid(row=i, column=j, padx=5, pady=5)
            line.append(temporarytext1)
        m1.append(line)
# 在两个矩阵中间显示‘乘以’
    lb = Label(newwindow, text='乘以')
    lb.grid(row=n // 2, column=n, padx=10)
# 获取输入控件来表示矩阵2
    for i in range(n):
        line = []
        for j in range(n):
            temporarytext2 = StringVar()
            ent = Entry(newwindow, width=3, textvariable=temporarytext2)
            ent.grid(row=i, column=1 + n + j, padx=5, pady=5)
            line.append(temporarytext2)
        m2.append(line)
    btn = Button(newwindow, text='calculate', command=pp)
    btn.grid(row=n, column=n, padx=10)
    newwindow.mainloop()


def calculate(n):
    global m1
    global m2
    mm1 = [[int(j.get()) for j in i] for i in m1]
    mm2 = [[int(j.get()) for j in i] for i in m2]
    newmatrix = []
    for i in range(n):
        newline = []
        for j in range(n):
            thesum = 0
            for k in range(n):
                thesum += mm1[i][k] * mm2[k][j]
            newline.append(thesum)
        newmatrix.append(newline)
    return newmatrix


def displayTheAnswer(n, mlist):
    nnwindow = Tk()
    nnwindow.title('Answer')
    for i in range(n):
        for j in range(n):
            temtext = StringVar()
            ent = Entry(nnwindow, width=3, textvariable=temtext ,state = 'readonly')
            ent.grid(row=i, column=j, padx=5, pady=5)
            temtext.set(mlist[i][j])
    nnwindow.mainloop()


main()

效果图

1.输入是几阶方阵的窗口:

利用python tkinter库实现GUI方阵计算器_第1张图片
image.png

2.我输入3,点击enter后的新窗口:

利用python tkinter库实现GUI方阵计算器_第2张图片
image.png

为了使验证计算合理性更直观轻松,输入对角矩阵:


利用python tkinter库实现GUI方阵计算器_第3张图片
image.png

3.点击calculate,得到答案:

利用python tkinter库实现GUI方阵计算器_第4张图片
image.png

反思

1.我一开始并不清楚可以这样实现,故采用按钮仅用来关闭窗口,然后创建新窗口的方法,颇为笨拙。但是后来经过朋友告知,原来其实可以使用toplevel实现新窗口。

2.窗口大小设计还不太合理,一些title显示不全。

你可能感兴趣的:(利用python tkinter库实现GUI方阵计算器)