我正在尝试连接两个不同类的两个方法。在名为“Ventana”的班级,这是我的主要窗口,我有这个方法:
def addChannel(self):
global channelCount
self.scrollLayout = QFormLayout()
self.canal = QwtPlot()
self.canal.setLayout(self.scrollLayout)
if channelCount <= 4:
self.splitter1.addWidget(self.canal)
channelCount += 1
print str(channelCount)
在另一堂课中,我有这些方法:
class QwtPlotList(QDialog):
def __init__(self):
QDialog.__init__(self)
uic.loadUi("PropiedadesCanal.ui", self)
self.botonAdd.clicked.connect(self.addChannel_2)
def addChannel_2(self):
global channelCount
self.botonAdd.clicked.connect(Ventana().addChannel)
if channelCount <= 4:
self.listWidget.addItem("Canal : " + str(channelCount))
我要做的是,当我按下“botonAdd
”按钮时,“addChannel_2
”方法会调用{{1}中的“addChannel”方法}类。然后,创建Ventana
(“self.canal”)。
这段代码会发生什么,当我按下“QWidget
”时,它会将一个项目放在botonAdd
中,但它不会创建listWidget
。如果我使用工具栏中的按钮创建“QWidget
”,则不会在QWidget
您可以在这些图片中看到所有这些:
The "botonAdd" creates an item in the QListWidget but not a QWidget
Another button creates the Qwidget, but not the item in the QListWidget
希望你能帮助我。感谢您的时间和答案答案 0 :(得分:1)
有几个问题
1。从另一个类调用类Ventana
中的函数。你做了什么:
self.botonAdd.clicked.connect(Ventana().addChannel)
Ventana()
创建了类Ventana
的新实例。该
按钮botonAdd
未连接到您的主窗口,它是
连接到刚刚创建的另一个主窗口。这个新窗口
未显示,并被销毁,添加addChannel_2
的结尾
垃圾收集器(因为你没有保留对它的引用)。
要调用右addChannel
,您需要引用实际的主窗口。在Qt中,主窗口通常是另一个窗口小部件的父窗口。您需要更改QwtPlotList
的定义,以便它可以拥有父级:
class QwtPlotList(QDialog):
def __init__(self,parent):
QDialog.__init__(self,parent)
#in main window Ventana
self.myDialog=QwtPlotList(self)
然后,您可以在Ventana
中调用QwtPlotList
的任何方法:
#in QwtPlotList
self.parent().any_method()
2。连接按钮单击多功能。你做了什么:
self.botonAdd.clicked.connect(self.function1)
def function1(self):
self.botonAdd.clicked.connect(function2)
每次单击该按钮,都会调用function1
,并将按钮单击连接到另一个功能。这些连接是附加的。第一次单击该按钮时,将调用function1
,并且该按钮将连接到function2
。第二次调用function1
和function2
,按钮连接到function2
。第三次调用function1
,function2
和function2
,等等。
您只需拨打function2
即可,无需连接按钮:
def function1:
function2()
3。使用全局变量:您应该避免使用全局变量,这通常是更好的解决方案。
我知道你有两个函数需要使用相同的变量channelCount
。为了避免全局,我会在channelCount
中保留对QwtPlotList
的引用,并将其作为参数传递给addChannel
def addChannel(channelCount):
channelCount+=1
return channelCount
#QWtPlotList
#init
self.channelCount=3
def addChannel_2(self):
self.channelCount=addChannel(self.channelCount)
我让你弄明白如何将所有东西放在一起:)