文件打开机制

时间:2015-05-18 00:26:20

标签: file button combobox pyside

我正在尝试创建一个应用程序。该应用程序为用户提供了2个组合框。组合框1给出了用户想要的文件名的第一部分,组合框2给出了文件名的第二部分。例如。组合框1选项1为1,组合框2选项1为A;所选文件是1_A.txt。 我有一个加载按钮,它使用文件名,并打开一个具有该名称的文件。如果不存在任何文件,应用程序将打开一个对话框,说明"没有这样的文件存在"

from PySide import QtGui, QtCore
from PySide.QtCore import*
from PySide.QtGui import*

class MainWindow(QtGui.QMainWindow):
    def __init__(self,):
        QtGui.QMainWindow.__init__(self)
        QtGui.QApplication.setStyle('cleanlooks')

        #PushButtons
        load_button = QPushButton('Load',self)
        load_button.move(310,280)
        run_Button = QPushButton("Run", self)
        run_Button.move(10,340)
        stop_Button = QPushButton("Stop", self)
        stop_Button.move(245,340)

        #ComboBoxes
        #Option1
        o1 = QComboBox(self)
        l1 = QLabel(self)
        l1.setText('Option 1:')
        l1.setFixedSize(170, 20)
        l1.move(10,230)
        o1.move(200, 220)
        o1.setFixedSize(100, 40)
        o1.insertItem(0,'')
        o1.insertItem(1,'A')
        o1.insertItem(2,'B')
        o1.insertItem(3,'test')

        #Option2
        o2 = QComboBox(self)
        l2 = QLabel(self)
        l2.setText('Option 2:')
        l2.setFixedSize(200, 20)
        l2.move(10,290)
        o2.move(200,280)
        o2.setFixedSize(100, 40)
        o2.insertItem(0,'')
        o2.insertItem(1,'1')
        o2.insertItem(2,'2')
        o2.insertItem(3,'100')

        self.fileName = QLabel(self)
        self.fileName.setText("Select Options")

        o1.activated.connect(lambda: self.fileName.setText(o1.currentText() + '_' + o2.currentText() + '.txt'))
        o2.activated.connect(lambda: self.fileName.setText(o1.currentText() + '_' + o2.currentText() + '.txt'))
        load_button.clicked.connect(self.fileHandle)

    def fileHandle(self):
        file = QFile(str(self.fileName.text()))
        open(file, 'r')

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = MainWindow()
    window.setWindowTitle("Test11")
    window.resize(480, 640)
    window.show()
    sys.exit(app.exec_())

我得到的错误是TypeError: invalid file: <PySide.QtCore.QFile object at 0x031382B0>,我怀疑这是因为文件句柄中描述的字符串未正确插入QFile。有人可以帮忙吗

2 个答案:

答案 0 :(得分:0)

Python open()函数对QFile类型的对象没有任何了解。我怀疑你确实需要构造一个QFile对象。

相反,只需通过open(self.fileName.text(), 'r')直接打开文件即可。您最好这样做:

with open(self.fileName.text(), 'r') as myfile:
    # do stuff with the file

除非您需要长时间保持文件打开

答案 1 :(得分:0)

我也想出了一个解决方案。

 def fileHandle(self):
        string = str(self.filename.text())
        file = QFile()
        file.setFileName(string)
        file.open(QIODevice.ReadOnly)
        print(file.exists())
        line = file.readLine()
        print(line)

这样做是它需要文件名字段的字符串。创建文件对象。将文件对象命名为字符串,然后打开该文件。我有存在来检查文件是否存在,并且在阅读完测试文档之后,我似乎按照我的意愿工作。

非常感谢@three_pineapples,但我将使用我的解决方案:P