2015-01-05 58 views
0

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

我想我没有正确理解一些部分,但在这个阶段我需要一些解释。我的主要挑战是以一种可以在GUI中使用的方式插入generate_data函数来创建一个随机矩阵。在代码结束时,我复制了错误。提前致谢。

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. 
+2

错误信息非常清晰 - generate_data中的'range(m)'需要'm'为'int',但'matrixBox.get()'提供了一个'str'。 – jonrsharpe

回答

2

什么你从Entry场得到的是一个字符串类型,但范围内取整数类型。
因此,当您拨打generate_data(matrixBox.get())时,您将一个字符串传递给generate_data

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