Issue
I'm new to python and PyQt so be patient with me.
The problem I'm having is that I can't seem to get the data to load into the tablewidget. The data is stored in a arraylist that is made from the dog class in the Dog.py file.
Is there a better/easier way to make/load data into the tablewidget when using arraylist and classes?
This is the error I get when i try to run the program:
Traceback (most recent call last):
File "/home/unseensnick/VS Code Projects/python projects/java assignments in python/DogRegistry/Main.py", line 39, in <module>
main = DogRegistry()
File "/home/unseensnick/VS Code Projects/python projects/java assignments in python/DogRegistry/Main.py", line 18, in __init__
self.loadData()
File "/home/unseensnick/VS Code Projects/python projects/java assignments in python/DogRegistry/Main.py", line 30, in loadData
self.dogTable.setItem(row, 0, QtWidgets.QTableWidgetItem(dog["name"]))
TypeError: 'Dog' object is not subscriptable
Here is my current code:
Main.py
import sys
from PyQt5.uic import loadUi
from PyQt5 import *
from PyQt5 import QtGui,QtCore, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from Dog import Dog
class DogRegistry(QDialog):
def __init__(self):
super(DogRegistry, self).__init__()
loadUi("DogRegistry.ui", self)
self.dogTable.setColumnWidth(0,165)
self.dogTable.setColumnWidth(1,165)
self.dogTable.setColumnWidth(2,90)
self.dogTable.setColumnWidth(3,90)
self.dogTable.setColumnWidth(4,90)
self.loadData()
def loadData(self):
dogs = []
dogs.append( Dog("Luna","Eurasier", 3, 22))
#dogs.append( Dog("Sky","Tax", 3, 3))
#dogs.append( Dog("Skye","Dachshund", 4, 5))
#dogs.append( Dog("Bella","Dachs", 2, 3))
row = 0
self.dogTable.setRowCount(len(dogs))
for dog in dogs:
self.dogTable.setItem(row, 0, QtWidgets.QTableWidgetItem(dog["name"]))
self.dogTable.setItem(row, 1, QtWidgets.QTableWidgetItem(dog["breed"]))
self.dogTable.setItem(row, 2, QtWidgets.QTableWidgetItem(str(dog["age"])))
self.dogTable.setItem(row, 3, QtWidgets.QTableWidgetItem(str(dog["weight"])))
self.dogTable.setItem(row, 4, QtWidgets.QTableWidgetItem(str(dog["tailLength"])))
row = row + 1
if __name__ == "__main__":
app = QApplication(sys.argv)
main = DogRegistry()
widget = QStackedWidget()
widget.addWidget(main)
widget.setFixedHeight(900)
widget.setFixedWidth(1200)
widget.show()
sys.exit(app.exec_())
Dog.py
class Dog:
def __init__(self, name, breed, age, weight):
self.name = name
self.breed = breed
self.age = age
self.weight = weight
self.tailLength = self.getTailLength()
def getTailLength(self):
if(self.breed.lower() == "tax" or self.breed.lower() == "dachs" or self.breed.lower() == "dachshund"):
return 3.7
else:
return (self.age * self.weight) / 10.0
def getName(self):
return self.name
def setName(self, name):
self.name = name
def getBreed(self):
return self.breed
def setBreed(self, breed):
self.breed = breed
def getAge(self):
return self.age
def setAge(self, age):
self.age = age
def getWeight(self):
return self.weight
def setName(self, weight):
self.weight = weight
GUI.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>mainWindow</class>
<widget class="QDialog" name="mainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1200</width>
<height>900</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>1200</width>
<height>900</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>1200</width>
<height>900</height>
</size>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<widget class="QWidget" name="mainWidget" native="true">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1200</width>
<height>900</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">QWidget#mainWidget{
background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(31, 64, 55, 255), stop:1 rgba(153, 242, 200, 255));
}
QWidget#mainWidgetLeft{
background-color: rgba(255, 255, 255, 0);
}
QWidget#mainWidgetRight{
background-color: rgba(255, 255, 255, 0);
}</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QWidget" name="mainWidgetLeft" native="true">
<property name="maximumSize">
<size>
<width>500</width>
<height>900</height>
</size>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>60</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>60</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>160</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="id">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>340</width>
<height>40</height>
</size>
</property>
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="text">
<string>ID:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="idInput">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>40</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="name">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>340</width>
<height>40</height>
</size>
</property>
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="text">
<string>Name:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="nameInput">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>40</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="breed">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>340</width>
<height>40</height>
</size>
</property>
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="text">
<string>Breed:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="breedInput">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>40</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="age">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>340</width>
<height>40</height>
</size>
</property>
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="text">
<string>Age:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="ageInput">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>40</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="weigth">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>340</width>
<height>40</height>
</size>
</property>
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="text">
<string>Weight:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="weightInput">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>40</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
<number>60</number>
</property>
<property name="leftMargin">
<number>100</number>
</property>
<property name="topMargin">
<number>10</number>
</property>
<property name="rightMargin">
<number>100</number>
</property>
<property name="bottomMargin">
<number>10</number>
</property>
<item>
<widget class="QPushButton" name="submitBtn">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Submit</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="editBtn">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Edit</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>240</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="mainWidgetRight" native="true">
<property name="maximumSize">
<size>
<width>700</width>
<height>900</height>
</size>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>40</number>
</property>
<property name="leftMargin">
<number>10</number>
</property>
<property name="topMargin">
<number>100</number>
</property>
<property name="rightMargin">
<number>60</number>
</property>
<property name="bottomMargin">
<number>60</number>
</property>
<item>
<widget class="QTableWidget" name="dogTable">
<column>
<property name="text">
<string>Name</string>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
</column>
<column>
<property name="text">
<string>Breed</string>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
</column>
<column>
<property name="text">
<string>Age</string>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
</column>
<column>
<property name="text">
<string>Weight</string>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
</column>
<column>
<property name="text">
<string>Tail-length</string>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
</column>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_5">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>240</number>
</property>
<property name="rightMargin">
<number>240</number>
</property>
<item>
<widget class="QPushButton" name="removeBtn">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>
Solution
thanks to @ekhumoro's comment I got it to work.
here is the code:
Main.py
import sys
from PyQt5.uic import loadUi
from PyQt5 import *
from PyQt5 import QtGui,QtCore, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from Dog import Dog
class DogRegistry(QDialog):
def __init__(self):
super(DogRegistry, self).__init__()
loadUi("DogRegistry.ui", self)
self.dogTable.setColumnWidth(0,165)
self.dogTable.setColumnWidth(1,165)
self.dogTable.setColumnWidth(2,90)
self.dogTable.setColumnWidth(3,90)
self.dogTable.setColumnWidth(4,90)
self.loadData()
def loadData(self):
dogs = []
dogs.append( Dog("Luna","Eurasier", 3, 22))
#dogs.append( Dog("Sky","Tax", 3, 3))
#dogs.append( Dog("Skye","Dachshund", 4, 5))
#dogs.append( Dog("Bella","Dachs", 2, 3))
row = 0
self.dogTable.setRowCount(len(dogs))
for dog in dogs:
self.dogTable.setItem(row, 0, QtWidgets.QTableWidgetItem(dog.getName()))
self.dogTable.setItem(row, 1, QtWidgets.QTableWidgetItem(dog.getBreed()))
self.dogTable.setItem(row, 2, QtWidgets.QTableWidgetItem(str(dog.getAge())))
self.dogTable.setItem(row, 3, QtWidgets.QTableWidgetItem(str(dog.getWeight())))
self.dogTable.setItem(row, 4, QtWidgets.QTableWidgetItem(str(dog.getTailLength())))
row = row + 1
if __name__ == "__main__":
app = QApplication(sys.argv)
main = DogRegistry()
widget = QStackedWidget()
widget.addWidget(main)
widget.setFixedHeight(900)
widget.setFixedWidth(1200)
widget.show()
sys.exit(app.exec_())
Answered By - Snickers
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.