在pyqt5中的btn.clicked.connect()方法中返回变量

时间:2019-07-09 15:21:27

标签: python pyqt5

我通过btn.clicked.connect(initUI)在类的 init ()中调用了函数initUI。函数initUI()包含一个fileName变量,我想返回给 init 函数。我该怎么办?

我已经在initUI()函数中编写了一个return语句来返回变量fileName。我接受了这样的变量:btn.clicked.connect(a = initUI)。

class MainWindow(QMainWindow,QWidget):

def __init__(self,parent=None):

     num=btn.clicked.connect(a=self.initUI)
def initUI(self):
    fn="The file Path"
    return fn

2 个答案:

答案 0 :(得分:0)

尝试一下:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class MainWindow(QMainWindow):  # ,QWidget):
    def __init__(self):
        super().__init__()

        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)

        self.label = QLabel()        
        self.btn = QPushButton("Button")
        self.btn.clicked.connect(self.initUI)        

        layout = QGridLayout(centralWidget)
        layout.addWidget(self.label)
        layout.addWidget(self.btn)

    def initUI(self):
        fn = "The file Path"
        self.label.setText(fn)
#        return fn

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_()

enter image description here

答案 1 :(得分:0)

如@ S.Nick的示例所示,您正在以错误的方式进行操作。您将按钮单击重定向到的功能应该处理设置(如果需要设置),而不要将其直接传递回去。基本上在类中,您需要一个属性来保存该值

@property
def classFilePath(self):
    return self.__FilePathName

@classFileName.setter
def classFilePath(self, value):
    self.__FilePathName = value

def __init__(self,parent=None):
     num=btn.clicked.connect(self.initUI)

def initUI(self):
    self.classFilePath ="The file Path"

这似乎有点额外的工作,但它使以后的阅读和修改变得更容易。此外,实际变量不会公开公开(我公开地说是因为,如果您知道Python中如何处理类,就知道没有真正的私有变量只是被混淆的私有变量。)