我设计基于PyQt4的一个GUI。该GUI基本上是一个窗口内的Qtabwidget。我们的想法是,每个窗口接收信号的时间,这个由该方法add_tab添加新的选项卡。当接收到firts时间信号它完美的作品,创建tab_0,但接下来的尝试它创造了两次tab_1中,下一个尝试是创建三个标签tab_2等。是否有人可以解释我发生了什么,以及如何解决它?我认为这是与enter image description heremutable话题相关,但我不知道。
提前致谢!!!这是我的代码:
class MyWindow(QtGui.QWidget):
recive=QtCore.pyqtSignal(str)
def __init__(self,parent=None):
super(MyWindow, self).__init__(parent)
QtGui.QWidget.__init__(self)
self.setWindowTitle(_translate("Form", "Form", None))
self.setObjectName(_fromUtf8("Form"))
self.resize(695, 577)
self.tabWidget = QtGui.QTabWidget(self)
self.tabWidget.setGeometry(QtCore.QRect(0, 0, 691, 571))
self.tabWidget.setAcceptDrops(False)
self.tabWidget.setObjectName("tabWidget")
@pyqtSlot(str)
def add_tab(self,numero):
self.tab = QtGui.QWidget(self.tabWidget)
self.tab.setObjectName("tab")
self.tabWidget.addTab(self.tab, "tab")
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab),
_translate("Form", "mesa_"+numero, None))
self.tabWidget.setCurrentIndex(int(numero))
QtCore.QMetaObject.connectSlotsByName(self.tabWidget)
self.tab.show()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window=MyWindow()
window.show()
window.recive.connect(window.add_tab)
window.recive.emit('0')
window.recive.connect(window.add_tab)
window.recive.emit('1')
window.recive.connect(window.add_tab)
window.recive.emit('2')
sys.exit(app.exec_())
对不起,我有PyQt5。离开一个window.recive.connect(window.add_tab)
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class MyWindow(QWidget):
recive = pyqtSignal(str)
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.setWindowTitle("Form")
self.resize(695, 577)
self.tabWidget = QTabWidget(self)
self.tabWidget.setGeometry(QRect(0, 0, 691, 571))
self.tabWidget.setAcceptDrops(False)
@pyqtSlot(str)
def add_tab(self, numero):
self.tab = QWidget(self.tabWidget)
self.tab.setObjectName("tab")
self.tabWidget.addTab(self.tab, "tab")
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), "mesa_"+numero)
self.tabWidget.setCurrentIndex(int(numero))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
window.recive.connect(window.add_tab)
window.recive.emit('0')
# window.recive.connect(window.add_tab) # <---
window.recive.emit('1')
# window.recive.connect(window.add_tab) # <---
window.recive.emit('2')
sys.exit(app.exec_())
来自您连接的活动方式:
QtCore.QMetaObject.connectSlotsByName(self.tabWidget)
每次add_tab
方法被调用时,一个新的连接注册。一个快速的解决办法是之前断开现有信号。
但是,我不知道该怎么做,当连接用connectSlotsByName
做...
关于连接和断开信号的良好做法,可以发现there