【发布时间】:2020-04-19 20:34:00
【问题描述】:
我正在使用 pyqt4,这是我的代码
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class View(QWidget):
def __init__(self):
super(View, self).__init__()
self.hbox = QHBoxLayout()
self.study_box = QVBoxLayout()
self.study_box.addWidget(QLabel('dsadasdasd'))
self.hbox.addLayout(self.study_box)
self.setLayout(self.hbox)
class Model(QWidget):
def __init__(self):
super(Model, self).__init__()
def func(self):
Tab().add_tab('sd')
class Tab(QTabWidget):
_instance = None
def __new__(cls, *args, **kw):
if cls._instance is None:
cls._instance = QWidget.__new__(cls, *args, **kw)
return cls._instance
def __init__(self):
super(Tab, self).__init__()
label = QPushButton('asd')
self.addTab(label, 'asd')
#method one, added successfully
# label.clicked.connect(lambda: self.add_tab('dsd'))
#method two, added unsuccessfully
label.clicked.connect(lambda: Model().func())
def add_tab(self, data):
# for x in range(self.count()):
# self.removeTab(0)
self.addTab(View(), data)
self.addTab(View(), data)
self.addTab(View(), data)
self.setCurrentIndex(1)
class Demo(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(0, 25, 2500, 1500)
wg = QWidget()
hbox = QHBoxLayout()
hbox.addWidget(Tab())
wg.setLayout(hbox)
self.setCentralWidget(wg)
self.setWindowState(Qt.WindowMaximized)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = Demo()
demo.show()
sys.exit(app.exec_())
我的要求是当我点击第一个选项卡的按钮时,他应该在界面中添加一个选项卡。但是,它没有。我很迷茫。它明明调用了 add_tab 函数,但是并没有将它添加到界面中。 类的结构不能更改,因为这是我在项目中的代码,如何获取实现需求?
【问题讨论】:
-
“它的 addTab 不成功”是什么意思?此外,从您的代码来看,
res等于 1 似乎是正确的,因为之前只有一个选项卡(“患者选项卡”)。无论如何,你应该给我们一个minimal, reproducible example,否则很难帮助你。 -
界面不显示,需要刷新界面吗?
-
正如我所说,您应该通过提供 MRE 来编辑您的问题(它必须是可重现的,这意味着我们应该能够自己复制、粘贴和运行它),否则我们无法为您提供太多帮助。除此之外,我真的不明白覆盖
__new__的需要,即使你真的需要,你应该: 1. 解释这种需要,可能用代码/cmets 来证明它是合理的; 2. 请记住,根据您的代码,self._Tab指的是 类,而不是其新创建的实例。 -
添加新方法是因为我在很多其他模块中调用了这个类的一个实例,但是他们想共享同一组数据,所以我添加了新方法,以便创建的实例是同一对象的数据,无论它在哪里。我重新编辑了这个问题,这是一个可复制的运行,谢谢
-
刚才我重新编辑了问题上的代码
标签: python pyqt pyqt4 qtabwidget