2015-05-18 3 views
0

Я пытаюсь создать приложение. Приложение предоставляет пользователю 2 комбинированных блока. Combo Box 1 дает первую часть имени файла, которую хочет пользователь, а Combo Box 2 - вторую часть имени файла. Например. Комбинированный блок 1 вариант 1 - 1, а вариант 1 комбинированного блока 2 - A; выбранный файл равен 1_A.txt. У меня есть кнопка загрузки, которая должна использовать имя файла и открыть файл с этим именем. Если файл не существует, то приложение открывает диалоговое окно с надписью «не существует такого файла»File Open Mechanism

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 правильно. Может кто-то помочь

ответ

0

Python open() функция не имеет никаких сведений об объектах типа QFile. Я сомневаюсь, что вам действительно нужно построить объект QFile.

Вместо этого просто откройте файл непосредственно через open(self.fileName.text(), 'r'). Предпочтительно, чтобы вы могли бы сделать:

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

, если вам нужно сохранить файл открытым в течение длительного периода времени

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) 

Что это такое, так это то, что он берет строку поля имени файла. Создает файловый объект. Именяет объект файла строку, а затем открывает файл. У меня есть, чтобы проверить, есть ли файл, и после прочтения тестового документа, который у меня есть, ti, казалось, работал так, как я хотел.

Спасибо в любом случае @three_pineapples, но я собираюсь использовать свое решение: P