PyQt按钮上传文件

时间:2014-08-12 16:37:09

标签: pyqt4 qt-signals

我想实现一个按钮,允许我从各种输入文件中选择并上传我选择的一个。我在网上搜索并汇总了一些代码,问题是,我不知道如何在一个插槽中实现fileDialogue。您在插槽“on_click”中看到的代码直接来自在线示例,但它并没有真正起作用。主要问题是getOpenFileName要求其中一个参数是“self”,我不确定我是否知道如何在PyQt槽中使用“self”。谢谢你的帮助

import sys
from PyQt4 import QtGui,QtCore
from PyQt4.QtCore import pyqtSlot
from PyQt4.QtGui import *

@pyqtSlot()
def on_click():
        filename = QtGui.QFileDialog.getOpenFileName(self,'Open File', '.')
        fname = open(filename)
        data = fname.read()
        self.textEdit.setText(data)
        fname.close()



class MainWindow(QtGui.QWidget):
        def __init__(self):     #try removing parent=None
                QtGui.QWidget.__init__(self)
                self.setGeometry(650,300,600,600)
                self.setWindowTitle("Data Viewer")


                quitB = QtGui.QPushButton("QUIT",self)
                uploadB = QtGui.QPushButton("UPLOAD",self)

                hbox = QHBoxLayout()




self.connect(quitB,QtCore.SIGNAL('clicked()'),QtGui.qApp,QtCore.SLOT('quit()'))
                uploadB.clicked.connect(on_click(self))

                #add buttons to horizontal box layout
                hbox.addWidget(quitB)
                hbox.addWidget(uploadB)
                self.setLayout(hbox)
def main():
        app = QtGui.QApplication(sys.argv)
        mw = MainWindow()
        mw.show()
        sys.exit(app.exec_())


if __name__ == "__main__":
        main()

1 个答案:

答案 0 :(得分:0)

  

您在插槽“on_click”中看到的代码直接来自   在线示例,它并没有真正起作用。主要问题是   getOpenFileName要求其中一个参数为“self”,我不是   我确定我知道如何在PyQt插槽中使用“self”。

我认为你把一些代码放在一些类中,比如QWidget QMainWindows等等。但是,你可以删除它。它只是在QTextEdit(我认为)中显示。

实际上,您可以使用getOpenFileName连接QMainWindows在您的班级QtCore.SIGNAL中实施getOpenFileName。如果您愿意,可以使用self实施。

请看我的例子;

import sys
from PyQt4 import QtCore, QtGui

class QDataViewer(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        # Layout Init.
        self.setGeometry(650, 300, 600, 600)
        self.setWindowTitle('Data Viewer')
        self.quitButton = QtGui.QPushButton('QUIT', self)
        self.uploadButton = QtGui.QPushButton('UPLOAD', self)
        hBoxLayout = QtGui.QHBoxLayout()
        hBoxLayout.addWidget(self.quitButton)
        hBoxLayout.addWidget(self.uploadButton)
        self.setLayout(hBoxLayout)
        # Signal Init.
        self.connect(self.quitButton,   QtCore.SIGNAL('clicked()'), QtGui.qApp, QtCore.SLOT('quit()'))
        self.connect(self.uploadButton, QtCore.SIGNAL('clicked()'), self.open)

    def open (self):
        filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', '.')
        print 'Path file :', filename

def main():
    app = QtGui.QApplication(sys.argv)
    mw = QDataViewer()
    mw.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

此致