Python 2.7 如何在pyqt4中正确创建第二个窗口
我正试图通过点击按钮打开主窗口旁边的第二个窗口,并在其上显示一个包含一些数据的tablewidget。当我打开窗户时,它升起了Python 2.7 如何在pyqt4中正确创建第二个窗口,python-2.7,pyqt4,Python 2.7,Pyqt4,我正试图通过点击按钮打开主窗口旁边的第二个窗口,并在其上显示一个包含一些数据的tablewidget。当我打开窗户时,它升起了 AttributeError: 'Ui_MainWindow' object has no attribute 'openTable' 主窗口是用Qt设计器创建的,并用pyuic4转换了ui文件。如何正确地纠正此错误,以避免引发错误 按钮调用函数: def showCliplist(self): data = self.metadata_list lu
AttributeError: 'Ui_MainWindow' object has no attribute 'openTable'
主窗口是用Qt设计器创建的,并用pyuic4转换了ui文件。如何正确地纠正此错误,以避免引发错误
按钮调用函数:
def showCliplist(self):
data = self.metadata_list
luts = self.lutlist
selected_lut = self.LUTBox.currentIndex()
openTable = ClipListViewer(data,luts,selected_lut)
self.openTable.show()
class ClipListViewer(QtGui.QWidget):
def __init__(self, data, luts, selected_lut, parent = None):
super(ClipListViewer,self).__init__()
self.setWindowTitle('Cliplist')
self.resize(900,600)
self.metadata = data
self.curentluts = luts
self.choosenlut = selected_lut
y_count = len(self.metadata)
self.table = QtGui.QTableWidget(y_count,6)
self.table.setHorizontalHeaderLabels(['Clip', 'Videocodec', 'FPS', 'Audiocodec', 'Start Timecode', 'LUT'])
x = y = 0
for items in self.metadata:
for entry in items:
#print entry
self.table.setItem(y, x, QtGui.QTableWidgetItem(entry))
self.table.resizeColumnToContents(x)
x += 1
self.comb = QtGui.QComboBox()
for lutname in self.curentluts:
self.comb.addItem(lutname)
self.comb.setCurrentIndex(self.choosenlut)
self.table.setCellWidget(y, 5, self.comb)
self.table.setColumnWidth(5, 230)
y += 1
x = 0
self.table.resizeRowsToContents()
layout = QtGui.QHBoxLayout()
layout.addWidget(self.table)
self.setLayout(layout)
self.show()
def closeEvent(self, event): #check if window was closed
print "Cliplist Window was closed! "
新窗口类:
def showCliplist(self):
data = self.metadata_list
luts = self.lutlist
selected_lut = self.LUTBox.currentIndex()
openTable = ClipListViewer(data,luts,selected_lut)
self.openTable.show()
class ClipListViewer(QtGui.QWidget):
def __init__(self, data, luts, selected_lut, parent = None):
super(ClipListViewer,self).__init__()
self.setWindowTitle('Cliplist')
self.resize(900,600)
self.metadata = data
self.curentluts = luts
self.choosenlut = selected_lut
y_count = len(self.metadata)
self.table = QtGui.QTableWidget(y_count,6)
self.table.setHorizontalHeaderLabels(['Clip', 'Videocodec', 'FPS', 'Audiocodec', 'Start Timecode', 'LUT'])
x = y = 0
for items in self.metadata:
for entry in items:
#print entry
self.table.setItem(y, x, QtGui.QTableWidgetItem(entry))
self.table.resizeColumnToContents(x)
x += 1
self.comb = QtGui.QComboBox()
for lutname in self.curentluts:
self.comb.addItem(lutname)
self.comb.setCurrentIndex(self.choosenlut)
self.table.setCellWidget(y, 5, self.comb)
self.table.setColumnWidth(5, 230)
y += 1
x = 0
self.table.resizeRowsToContents()
layout = QtGui.QHBoxLayout()
layout.addWidget(self.table)
self.setLayout(layout)
self.show()
def closeEvent(self, event): #check if window was closed
print "Cliplist Window was closed! "
我检查了你的代码,好的,让我解释一下
AttributeError: 'Ui_MainWindow' object has no attribute 'openTable'
此错误表示,,“我在类Ui\u MainWindow中没有self.openTable(这是真的,因为您有自己的创建方法)”
为什么?:因为这方面存在问题
def showCliplist(self):
data = self.metadata_list
luts = self.lutlist
selected_lut = self.LUTBox.currentIndex()
openTable = ClipListViewer(data,luts,selected_lut) # <- (1) THIS LINE
self.openTable.show() # <- (2) THIS LINE
为什么在调用self.openTable.show()之前显示第二个小部件
回答:您可以在第二个小部件的最后一行代码中看到您的seeQtGui.QWidget.show(self)
在启动结束前已被调用
class ClipListViewer(QtGui.QWidget):
def __init__(self, data, luts, selected_lut, parent = None):
super(ClipListViewer,self).__init__()
.
.
.
self.show() # <- THIS LINE
类ClipListViewer(QtGui.QWidget):
定义初始化(自身、数据、lut、选定的lut、父项=无):
超级(ClipListViewer,self)。\uu初始化
.
.
.
self.show()#非常感谢!现在一切都好了!