Python:如何共享同一个widge

2024-09-30 02:27:36 发布

您现在位置:Python中文网/ 问答频道 /正文

QTabWidget有两个选项卡:“A”和“B”。在

还有一个listWidgetA=QtGui.QListWidget()我想在“A”和“B”之间分享。在

到目前为止,我还没有找到一种方法将listWidgetA分配给两个不同的布局。将其指定给一个布局会立即取消对另一个布局的指定。我不想再创造一个QtGui.QListWidget()因为它会产生大量重复/重复的代码。这是一个例子。想知道是否有办法解决这种情况是很有趣的。在

from PyQt4 import QtGui, QtCore
import sys, os


class Dialog_01(QtGui.QMainWindow):
    def __init__(self):
        super(QtGui.QMainWindow,self).__init__()

        myTabWidget = QtGui.QTabWidget()

        QGroupBoxA = QtGui.QGroupBox()
        QHBoxLayoutA = QtGui.QHBoxLayout()

        QGroupBoxA.setLayout(QHBoxLayoutA)
        myTabWidget.addTab(QGroupBoxA,' Tab A ')

        listWidgetA = QtGui.QListWidget()
        for i in range(12): 
            QtGui.QListWidgetItem( 'Item '+str(i), listWidgetA )

        QHBoxLayoutA.addWidget(listWidgetA)


        QGroupBoxB = QtGui.QGroupBox()
        QHBoxLayoutB = QtGui.QHBoxLayout()
        QGroupBoxB.setLayout(QHBoxLayoutB)

        # QHBoxLayoutB.addWidget(listWidgetA)   
        myTabWidget.addTab(QGroupBoxB,' Tab B ')

        self.setCentralWidget(myTabWidget)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    dialog_1 = Dialog_01()
    dialog_1.show()
    dialog_1.resize(480,320)
    sys.exit(app.exec_())

Tags: importselfsys布局dialogqtguiqlistwidgetqtabwidget
2条回答

据我所知,每个小部件都有一个父级。在

您可以考虑使用两个QListView小部件(而不是QListWidget),它们共享一个且只有一个模型。这将避免您担心重复/重复的代码。在

谢谢各位!在这里,它正在运行(在对话框打开后,单击选项卡让它做生意):

from PyQt4 import QtGui, QtCore
import sys, os

class Dialog_01(QtGui.QMainWindow):
    def __init__(self):
        super(QtGui.QMainWindow,self).__init__()

        myTabWidget = QtGui.QTabWidget()        

        self.QGroupBoxA = QtGui.QGroupBox()        
        myTabWidget.addTab(self.QGroupBoxA,' Tab A ')        

        self.QGroupBoxB = QtGui.QGroupBox()        
        myTabWidget.addTab(self.QGroupBoxB,' Tab B ')

        self.QHBoxLayout = QtGui.QHBoxLayout()
        self.listWidget = QtGui.QListWidget()

        self.QHBoxLayout.addWidget(self.listWidget)

        myTabWidget.connect(myTabWidget, QtCore.SIGNAL("currentChanged(int)"), self.tabSelected) 

        self.setCentralWidget(myTabWidget)

    def tabSelected(self, arg=None):
        self.listWidget.clear()
        if arg==0: 
            self.QGroupBoxA.setLayout(self.QHBoxLayout)
            for i in range(12): 
                QtGui.QListWidgetItem( 'A Item '+str(i), self.listWidget )

        if arg==1: 
            self.QGroupBoxB.setLayout(self.QHBoxLayout)      
            for i in range(12): 
                QtGui.QListWidgetItem( 'B Item '+str(i), self.listWidget )


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    dialog_1 = Dialog_01()
    dialog_1.show()
    dialog_1.resize(480,320)
    sys.exit(app.exec_())

相关问题 更多 >

    热门问题