2015-01-05 3 views
0

Я пишу скрипт для выполнения умножения матричного вектора с помощью GUI с использованием Tkinter of Python. Я новичок в TKinter, и я стараюсь учиться. Для этого я написал для этого следующий код. Функция generate_data получает число (например, m) и создает матрицу mxm. В графическом интерфейсе пользователь должен ввести целое число для матрицы и целое число для вектора и вычислить результат, поэтому функция matvec выполняет вычисление.Создание графического интерфейса для умножения матричного вектора

Я думаю, что я не понял должным образом некоторые части, но на данном этапе мне понадобятся некоторые объяснения. Моя главная задача - вставить функцию 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

Сообщение об ошибке довольно ясно - 'range (m)' in 'generate_data' ожидает' m' как 'int', но' matrixBox.get() 'предоставил' str'. – jonrsharpe

ответ

2

Что вы получаете от Entry поля типа строка, но диапазон принимает целочисленный тип.
Таким образом, при звонке generate_data(matrixBox.get()) вы передаете строку в generate_data.

Вы можете решить это, позвонив по телефону generate_data(int(matrixBox.get())) или добавив m = int(m) в качестве первой строки вашей функции generate_data.

Смежные вопросы