2015-01-05 168 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函數的第一行來解決此問題。