我正在尝试创建一个应用程序。应用程序为用户提供了2个组合框。组合框1给出了用户想要的文件名的第一部分,组合框2给出了文件名的第二部分。例如,组合框1选项1为1,组合框2选项1为A;选择的文件为"1_A.txt"。我有一个加载按钮,这是使用文件名,并打开一个文件与该名称。如果文件不存在,应用程序打开一个对话框,提示"no Such file exists"
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中。谁能帮帮我
Python open()
函数不知道类型为QFile
的对象。不过,我怀疑您是否真的需要构造一个QFile
对象。
相反,只需通过open(self.fileName.text(), 'r')
直接打开文件。最好是这样做:
with open(self.fileName.text(), 'r') as myfile:
# do stuff with the file
除非您需要长时间打开文件
我也想到了一个解决办法。
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