我正在尝试创建一个应用程序。该应用程序为用户提供了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。有人可以帮忙吗
答案 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