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_())
2 个回答
3
谢谢大家!这里是它的实际效果(对话框打开后,点击标签让它开始工作):
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_())
4
据我所知,每个小部件(widget)都有且只有一个父级。
你可以考虑使用两个 QListView
小部件(而不是 QListWidget
),它们共享同一个模型。这样可以避免你担心重复代码的问题。