我想将数据从数据框加载到表视图。 然后我想在我的TableView UI上显示它
但我随机得到一个:QPaintDevice:无法销毁正在绘制的绘制设备
我没有画画的对象,所以我不能结束它
编辑:有时在滚动TableView时会发生这种情况 dataframe_orders是我从数据库中提取的数据帧。 传递的检查顺序只是更新数据库中某些内容的函数。 他们在我使用tkinter的另一个代码上工作正常。 当我离开窗口时,我试图破坏表视图对象和模型(这是一个辅助窗口,因此要返回到主窗口)
我添加了PandaModel,它基本上就是我用来在tableview上设置数据帧的模型
这是我的密码:
class PandasModel(QtCore.QAbstractTableModel):
def __init__(self, df = pd.DataFrame(), parent=None):
QtCore.QAbstractTableModel.__init__(self, parent=parent)
self._df = df.copy()
def toDataFrame(self):
return self._df.copy()
def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole):
if role != QtCore.Qt.DisplayRole:
return QtCore.QVariant()
if orientation == QtCore.Qt.Horizontal:
try:
return self._df.columns.tolist()[section]
except (IndexError, ):
return QtCore.QVariant()
elif orientation == QtCore.Qt.Vertical:
try:
# return self.df.index.tolist()
return self._df.index.tolist()[section]
except (IndexError, ):
return QtCore.QVariant()
def data(self, index, role=QtCore.Qt.DisplayRole):
if role != QtCore.Qt.DisplayRole:
return QtCore.QVariant()
if not index.isValid():
return QtCore.QVariant()
return QtCore.QVariant(str(self._df.iloc[index.row(), index.column()]))
def setData(self, index, value, role):
row = self._df.index[index.row()]
col = self._df.columns[index.column()]
if hasattr(value, 'toPyObject'):
# PyQt4 gets a QVariant
value = value.toPyObject()
else:
# PySide gets an unicode
dtype = self._df[col].dtype
if dtype != object:
value = None if value == '' else dtype.type(value)
self._df.set_value(row, col, value)
return True
def rowCount(self, parent=QtCore.QModelIndex()):
return len(self._df.index)
def columnCount(self, parent=QtCore.QModelIndex()):
return len(self._df.columns)
def sort(self, column, order):
colname = self._df.columns.tolist()[column]
self.layoutAboutToBeChanged.emit()
self._df.sort_values(colname, ascending= order == QtCore.Qt.AscendingOrder, inplace=True)
self._df.reset_index(inplace=True, drop=True)
self.layoutChanged.emit()
class Ui_OrderWindow(object):
def setupUi(self, OrderWindow):
OrderWindow.setObjectName("OrderWindow")
OrderWindow.resize(1919, 600)
self.centralwidgetorders = QtWidgets.QWidget(OrderWindow)
self.centralwidgetorders.setObjectName("centralwidgetorders")
self.fenetreorders = QtWidgets.QFrame(self.centralwidgetorders)
self.fenetreorders.setGeometry(QtCore.QRect(10, 10, 1891, 551))
self.fenetreorders.setStyleSheet("QFrame{\n"
"border-radius:20px;\n"
"background-color: rgb(255, 255, 255);\n"
"}")
self.fenetreorders.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.fenetreorders.setFrameShadow(QtWidgets.QFrame.Raised)
self.fenetreorders.setObjectName("fenetreorders")
self.titreorders = QtWidgets.QLabel(self.fenetreorders)
self.titreorders.setGeometry(QtCore.QRect(880, 50, 151, 41))
font = QtGui.QFont()
font.setFamily("Dubai")
font.setPointSize(18)
font.setBold(True)
font.setWeight(75)
self.titreorders.setFont(font)
self.titreorders.setStyleSheet("color: rgb(18, 0, 124)")
self.titreorders.setObjectName("titreorders")
self.generatemailorders = QtWidgets.QPushButton(self.fenetreorders)
self.generatemailorders.setGeometry(QtCore.QRect(890, 500, 121, 31))
font = QtGui.QFont()
font.setFamily("Dubai")
font.setPointSize(13)
font.setBold(False)
font.setWeight(50)
self.generatemailorders.setFont(font)
self.generatemailorders.setStyleSheet("QPushButton{\n"
"background-color: rgb(18, 0, 124);\n"
"color: rgb(239, 239, 239);\n"
"border-radius: 8px;\n"
"\n"
"}\n"
"\n"
"QPushButton:hover{\n"
"background-color:rgb(21, 0, 166);\n"
"color: rgb(239, 239, 239);\n"
"border-radius: 8px;\n"
"\n"
"}")
self.generatemailorders.setObjectName("generatemailorders")
self.tableVieworders = QtWidgets.QTableView(self.fenetreorders)
self.tableVieworders.setGeometry(QtCore.QRect(20, 100, 1851, 371))
self.tableVieworders.setStyleSheet("background-color: rgb(239, 239, 239);\n"
"border-radius:0px;\n"
"")
self.tableVieworders.setObjectName("tableVieworders")
self.btnretour = QtWidgets.QPushButton(self.fenetreorders)
self.btnretour.setGeometry(QtCore.QRect(20, 50, 41, 41))
self.btnretour.setStyleSheet("QPushButton { \n"
" border: none;\n"
" background-color: transparent;\n"
" \n"
"}\n"
"QPushButton:hover {\n"
" border: none;\n"
" border-radius:0px;\n"
" \n"
" \n"
" background-color: qlineargradient(spread:pad, x1:0.482759, y1:0, x2:0.517241, y2:0.977273, stop:0 rgba(238, 238, 238, 255), stop:1 rgba(238, 238, 238, 255))\n"
"}\n"
"QPushButton:pressed { \n"
" background-color: rgb(85, 170, 255);\n"
"}")
self.btnretour.setText("")
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("left-arrow-icon-7.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btnretour.setIcon(icon)
self.btnretour.setIconSize(QtCore.QSize(32, 32))
self.btnretour.setObjectName("btnretour")
self.titlezone = QtWidgets.QWidget(self.centralwidgetorders)
self.titlezone.setGeometry(QtCore.QRect(10, 10, 1891, 41))
self.titlezone.setStyleSheet("background-color: rgb(18, 0, 124);\n"
"border-top-left-radius:20px;\n"
"border-top-right-radius:20px;")
self.titlezone.setObjectName("titlezone")
self.titlewindow = QtWidgets.QLabel(self.titlezone)
self.titlewindow.setGeometry(QtCore.QRect(40, 0, 101, 41))
font = QtGui.QFont()
font.setFamily("Dubai")
font.setPointSize(13)
self.titlewindow.setFont(font)
self.titlewindow.setStyleSheet("color: rgb(239, 239, 239);")
self.titlewindow.setObjectName("titlewindow")
self.framebtn = QtWidgets.QFrame(self.centralwidgetorders)
self.framebtn.setGeometry(QtCore.QRect(1790, 10, 101, 41))
self.framebtn.setStyleSheet("background-color: rgb(18, 0,124);\n"
"border-radius:20px;")
self.framebtn.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.framebtn.setFrameShadow(QtWidgets.QFrame.Raised)
self.framebtn.setObjectName("framebtn")
self.btnminimize = QtWidgets.QPushButton(self.framebtn)
self.btnminimize.setGeometry(QtCore.QRect(10, 1, 40, 41))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.btnminimize.sizePolicy().hasHeightForWidth())
self.btnminimize.setSizePolicy(sizePolicy)
self.btnminimize.setMinimumSize(QtCore.QSize(40, 0))
self.btnminimize.setMaximumSize(QtCore.QSize(40, 16777215))
self.btnminimize.setStyleSheet("QPushButton { \n"
" border: none;\n"
" background-color: transparent;\n"
" \n"
"}\n"
"QPushButton:hover {\n"
" border: none;\n"
" border-radius:0px;\n"
" \n"
" \n"
" background-color: rgb(16, 1, 108);\n"
"}\n"
"QPushButton:pressed { \n"
" background-color: rgb(85, 170, 255);\n"
"}")
self.btnminimize.setText("")
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap("minimizeicon-removebg-preview.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btnminimize.setIcon(icon1)
self.btnminimize.setObjectName("btnminimize")
self.btnclose = QtWidgets.QPushButton(self.framebtn)
self.btnclose.setGeometry(QtCore.QRect(50, 0, 40, 41))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.btnclose.sizePolicy().hasHeightForWidth())
self.btnclose.setSizePolicy(sizePolicy)
self.btnclose.setMinimumSize(QtCore.QSize(40, 0))
self.btnclose.setMaximumSize(QtCore.QSize(40, 16777215))
self.btnclose.setStyleSheet("QPushButton { \n"
" border: none;\n"
" background-color: transparent;\n"
" \n"
"}\n"
"QPushButton:hover {\n"
" border: none;\n"
" border-radius:0px;\n"
" \n"
" \n"
" background-color: rgb(16, 1, 108);\n"
"}\n"
"QPushButton:pressed { \n"
" background-color: rgb(85, 170, 255);\n"
"}")
self.btnclose.setText("")
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap("cil-x.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btnclose.setIcon(icon2)
self.btnclose.setObjectName("btnclose")
OrderWindow.setCentralWidget(self.centralwidgetorders)
self.statusbar = QtWidgets.QStatusBar(OrderWindow)
self.statusbar.setObjectName("statusbar")
OrderWindow.setStatusBar(self.statusbar)
self.retranslateUi(OrderWindow)
QtCore.QMetaObject.connectSlotsByName(OrderWindow)
def retranslateUi(self, OrderWindow):
_translate = QtCore.QCoreApplication.translate
OrderWindow.setWindowTitle(_translate("OrderWindow", "MainWindow"))
self.titreorders.setText(_translate("OrderWindow", "Orders Found"))
self.generatemailorders.setText(_translate("OrderWindow", "Generate Mail"))
self.titlewindow.setText(_translate("OrderWindow", "AutoTrade"))
self.btnminimize.setToolTip(_translate("OrderWindow", "Minimize"))
self.btnclose.setToolTip(_translate("OrderWindow", "Minimize"))
class OrderWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.ui = Ui_OrderWindow()
self.ui.setupUi(self)
self.setWindowFlag(Qt.FramelessWindowHint)
self.setAttribute(Qt.WA_TranslucentBackground)
# MINIMIZE
self.ui.btnminimize.clicked.connect(lambda: self.showMinimized())
# CLOSE
self.ui.btnclose.clicked.connect(lambda: self.close_order())
self.model = PandasModel(dataframe_orders)
self.ui.tableVieworders.setModel(self.model)
self.ui.tableVieworders.show()
print(self.ui.tableVieworders.__dict__)
self.ui.generatemailorders.clicked.connect(lambda: self.runmailorders())
self.ui.btnretour.clicked.connect(lambda: self.retour_main())
def moveWindow(event):
# IF LEFT CLICK MOVE WINDOW
if event.buttons() == Qt.LeftButton:
self.move(self.pos() + event.globalPos() - self.dragPos)
self.dragPos = event.globalPos()
event.accept()
self.setFixedSize(self.size())
print(vars(self.ui.tableVieworders))
## SHOW ==> MAIN WINDOW
########################################################################
self.show()
def retour_main(self):
del self.model
self.ui.tableVieworders.destroy()
MainWindow()
self.destroy()
def close_order(self):
del self.model
self.ui.tableVieworders.destroy()
MainWindow()
self.destroy()
def runmailorders(self):
check_order_passe()
del self.model
self.ui.tableVieworders.destroy()
self.close()
def mousePressEvent(self, event):
self.dragPos = event.globalPos()
目前没有回答
相关问题 更多 >
编程相关推荐