Python 2.7 如何在pyqt4中正确创建第二个窗口

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

我正试图通过点击按钮打开主窗口旁边的第二个窗口,并在其上显示一个包含一些数据的tablewidget。当我打开窗户时,它升起了

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()之前显示第二个小部件

回答:您可以在第二个小部件的最后一行代码中看到您的see
QtGui.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()#非常感谢!现在一切都好了!