Qt中通常有两种类型的小部件接口。一个是视图版本,另一个是小部件版本(继承视图)。最容易使用的是widget版本,对于您似乎正在尝试做的事情,我建议您这样做。在
另外,虽然你可以用你以前的方式来做软件,但通常遵循更常见的约定会更好。我修改了您的代码(包括构建主窗口的方式),让小GUI使用新方法(addCar)来将汽车类信息添加到QTreeWidget中:from PyQt5 import QtCore, QtGui, QtWidgets
import sys
#Python Data:
class car:
def __init__(self, name, color):
self.name = name
self.color = color
#Window:
class Ui_MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(Ui_MainWindow, self).__init__()
self.setupUi()
def setupUi(self):
self.setObjectName("MainWindow")
self.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(self)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(650, 510, 75, 23))
self.pushButton.setObjectName("pushButton")
# self.treeView = QtWidgets.QTreeView(self.centralwidget)
self.treeView = QtWidgets.QTreeWidget(self.centralwidget)
self.treeView.setColumnCount(1)
self.treeView.setGeometry(QtCore.QRect(30, 20, 591, 481))
self.treeView.setObjectName("treeView")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(680, 120, 113, 20))
self.lineEdit.setObjectName("lineEdit")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(630, 120, 46, 13))
self.label.setObjectName("label")
self.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(self)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
self.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(self)
self.statusbar.setObjectName("statusbar")
self.setStatusBar(self.statusbar)
self.retranslateUi()
QtCore.QMetaObject.connectSlotsByName(self)
def addCar(self, car, name):
item = QtWidgets.QTreeWidgetItem([name])
child1 = QtWidgets.QTreeWidgetItem(["Type: " + car.name])
child2 = QtWidgets.QTreeWidgetItem(["Type: " + car.color])
item.addChild(child1)
item.addChild(child2)
self.treeView.addTopLevelItem(item)
def retranslateUi(self):
_translate = QtCore.QCoreApplication.translate
self.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "Apply"))
self.label.setText(_translate("MainWindow", "Value"))
if __name__ == "__main__":
#create Data
blue_car = car("family_car", "blue")
red_car = car("sports_car", "red")
#open UI
app = QtWidgets.QApplication(sys.argv)
# MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
# ui.setupUi(MainWindow)
# Add car object
ui.addCar(blue_car, "Blue Car")
ui.addCar(red_car, "Red Car")
ui.show()
sys.exit(app.exec_())
结果是:
另外,我建议你试试看pyQt5的在线快速教程(任意示例:zetcode),因为如果你现在开始使用这种方法来构建软件,那么在我看来,你试图应用的方法最终会在将来重写它的大部分内容(我想……)。我过去也犯过同样的错误。在