【问题标题】:Python - how to use the value of a variable inside a function that is called when a button is clickedPython - 如何在单击按钮时调用的函数中使用变量的值
【发布时间】:2018-04-17 16:19:22
【问题描述】:

我有一段这样的python代码:

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

    --snip--        

        self.ui.pushButton.clicked.connect(self.selectFile)
        someParameter = someFunction(self.filename) # (1)

    def selectFile(self):
        self.ui.lineEdit.setText(QtGui.QFileDialog.getOpenFileName())
        self.filename = self.ui.lineEdit.text() # I want to use "filename" variable in (1)

    --snip--

我想获取 QFileDialog 选择的文件的名称并做两件事;首先,在 lineEdit 小部件中显示文件的地址,其次,将文件的地址存储在一个变量中,以便稍后在该过程的其余部分中使用它。我该怎么做,正确的方法是什么?

【问题讨论】:

    标签: python function pyqt signals-slots


    【解决方案1】:

    您似乎不习惯面向对象的编程。 在面向对象编程中,Class 中有membermethod

    在您的情况下,您应该像这样定义member,以便您以后可以处理它。所以你应该了解member在面向对象编程中的含义。

    class MainWindow(QtGui.QMainWindow):
        def __init__(self):
            QtGui.QMainWindow.__init__(self)
            self.filename = ""
            self.someParameter = None
    
        --snip--        
    
            self.ui.pushButton.clicked.connect(self.selectFile)
    
        def setParameter(self):
            self.someParameter = someFunction(self.filename)
    
        def selectFile(self):
            self.filename = QtGui.QFileDialog.getOpenFileName()
            self.ui.lineEdit.setText(self.filename)
            self.setParameter()
    
        --snip--
    

    已编辑

    这里是一些使用QFileDialog.getOpenFileName 的示例代码。试试这个。

    from PyQt5.QtWidgets import QWidget, QPushButton, QFileDialog, QVBoxLayout, QApplication
    from PyQt5 import QtGui
    
    class my_ui(QWidget):
        def __init__(self, parent=None):
            super(my_ui, self).__init__()
            self.filename = ""
            self.button1 = QPushButton("show dialog", parent)
            self.button2 = QPushButton("do something", parent)
            self.button1.clicked.connect(self.show_dialog)
            self.button2.clicked.connect(self.do_something)
            self.layout = QVBoxLayout()
            self.layout.addWidget(self.button1)
            self.layout.addWidget(self.button2)
            self.setLayout(self.layout)
        def show_dialog(self):
            self.filename = QFileDialog.getOpenFileName()
            print("filename updated: '%s'"%str(self.filename)) 
        def do_something(self):
            print("filename = '%s'"%str(self.filename)) 
    
    app = QApplication([])
    sample_ui = my_ui()
    sample_ui.show()
    app.exec_()
    

    【讨论】:

    • 如何确保值已更新? (就像使用 print 来检查值一样)
    • @gnome : 你想检查什么变量,用什么方法?
    • 我想使用 FileDialog 选择的文件名,然后稍后使用另一个模块打开它(读取其中的数据并做一些数学运算)
    • @gnome:我添加了使用QFileDialog.getOpenFileName 的示例代码。看看是不是你想要的。
    猜你喜欢
    • 2018-03-03
    • 2021-12-31
    • 2018-09-06
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2014-01-11
    相关资源
    最近更新 更多