Python 为矩阵向量乘法创建GUI

Python 为矩阵向量乘法创建GUI,python,matrix,tkinter,Python,Matrix,Tkinter,我正在编写一个脚本,使用Python的Tkinter使用GUI执行矩阵向量乘法。我是新来的TKinter,我正在努力学习。为此,我编写了以下代码。generate_data函数获取一个a数字(例如m),并创建一个mxm矩阵。在GUI中,用户应为矩阵输入一个整数,为向量输入一个整数,然后按compute键,以便matvec函数执行计算 我想我还没有完全理解其中的一些部分,但在现阶段我需要一些解释。我的主要挑战是插入generate_data函数,该函数可以在GUI中用于创建随机矩阵。在代码末尾,我

我正在编写一个脚本,使用Python的Tkinter使用GUI执行矩阵向量乘法。我是新来的
TKinter
,我正在努力学习。为此,我编写了以下代码。
generate_data
函数获取一个a数字(例如
m
),并创建一个
mxm
矩阵。在GUI中,用户应为矩阵输入一个整数,为向量输入一个整数,然后按compute键,以便
matvec
函数执行计算

我想我还没有完全理解其中的一些部分,但在现阶段我需要一些解释。我的主要挑战是插入
generate_data
函数,该函数可以在GUI中用于创建随机矩阵。在代码末尾,我复制了错误。提前谢谢

import sys
from Tkinter import *
import dotprod

base = Tk()
resultStr = StringVar()
resultStr.set("Enter Matrix1 and Matrix2")

matrixLabel = Label(text = "Enter the size of the matrix:")
matrixLabel.pack()
matrixBox = Entry()
matrixBox.pack()

vectorLabel = Label(text = "Enter the size of the vector:")
vectorLabel.pack()
vectorBox = Entry()
vectorBox.pack()

def generate_data(m):
    test_data = []
    for i in range(m):
        test_data.append([])
        for j in range(m):
            test_data[i].append(random())        
    return test_data

def matvec():
    m = int(generate_data((matrixBox.get())))
    v = [2] * len_m
    vec = [0] * len(m)
    for i in range(len(m)):
        vec[i] = dotprod.dotprod(m[i], v)
    resultStr.set("Matrix vector product is " + str(vec))
    return vec  

Computebutton = Button(text = "Compute", command = matvec)
Computebutton.pack()
base.mainloop()
错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
    return self.func(*args)
  File "<stdin>", line 2, in matvec
  File "<stdin>", line 3, in generate_data
TypeError: range() integer end argument expected, got str.
Tkinter回调中出现异常 回溯(最近一次呼叫最后一次): 文件“/usr/lib/python2.7/lib-tk/Tkinter.py”,第1413行,在调用中__ 返回self.func(*args) 文件“”,第2行,在matvec中 生成_数据中第3行的文件“” TypeError:应为range()整数结束参数,获得str。
条目
字段中得到的是字符串类型,但范围采用整数类型。
因此,当您调用
generate_data(matrixBox.get())
时,您会将一个字符串传递给
generate_data


您可以通过调用
generate_data(int(matrixBox.get())
或添加
m=int(m)
作为
generate_data
函数的第一行来解决此问题。

错误消息非常清楚-
generate_data
中的
range(m)
期望
m
成为
int
,但
matrixBox.get()
提供了一个
str