Python PyQt5可重用文件选择对话框
我想使用GUI加载两个文件,然后对这两个文件执行python命令。我想使用一个可重用的文件选择方法来设置调用它的元素。我看到的每个教程都会设置一个特定的命名元素,而不是使用元素。如何修复此代码Python PyQt5可重用文件选择对话框,python,pyqt5,Python,Pyqt5,我想使用GUI加载两个文件,然后对这两个文件执行python命令。我想使用一个可重用的文件选择方法来设置调用它的元素。我看到的每个教程都会设置一个特定的命名元素,而不是使用元素。如何修复此代码 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QDesktopWidget, QLabel, QPushButton, QInputDialog, QLineEdit, QFileDialog, QAction from
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDesktopWidget, QLabel, QPushButton, QInputDialog, QLineEdit, QFileDialog, QAction
from PyQt5.QtGui import QIcon
class dswfGui(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# Build the window widget
self.setGeometry(300, 300, 550, 550) # x, y, w, h
self.setWindowTitle("workflow")
self.center()
# Add a label
label = QLabel("workflow", self)
label.resize(label.sizeHint())
label.move(120, 20)
# Select input file1
file1_label = QLabel("file 1", self)
file1_label.resize(file1_label.sizeHint())
file1_label.move(20,50)
file1_label.setToolTip('end file 1')
self.file1 = QLineEdit("Select file", self)
self.file1.setObjectName("file1")
self.file1.resize(self.file1.sizeHint())
self.file1.move(120, 50)
self.file1.setToolTip('Select file 1')
f1btn = QPushButton('Select file 1', self)
f1btn.resize(f1btn.sizeHint())
f1btn.element = self.file1
f1btn.move(250, 46)
f1btn.clicked.connect(self.selectFile)
# Select input file2
file2_label = QLabel("file 2", self)
file2_label.resize(file2_label.sizeHint())
file2_label.move(20,90)
file2_label.setToolTip('end file 2')
self.file2 = QLineEdit("Select file2", self)
self.file2.setObjectName("file2")
self.file2.resize(self.file2.sizeHint())
self.file2.move(120, 90)
self.file2.setToolTip('Select file 2')
f2btn = QPushButton('Select file 2', self)
f2btn.resize(f2btn.sizeHint())
f2btn.element = self.file1
f2btn.move(250, 86)
# this doesn't work because self.selectFile doesn't accept an element or read an element
f2btn.clicked.connect(self.selectFile)
self.statusBar()
# Show window and run
self.show()
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
def selectFile(self):
# I want this to be reusable, but it doesn't seem
# to want to let me pass element in or call self.element
self.element.setText(QFileDialog.getOpenFileName()[0])
#this works but is not DRY
#self.file1.setText(QFileDialog.getOpenFileName()[0])
if __name__ == "__main__":
app = QApplication(sys.argv)
gui = dswfGui()
sys.exit(app.exec_())
我不知道如何使我想要的更清楚。我想在UI中选择两个文件。我想使用一种方法(selectFile)打开QFileDialog并将相应的QLineEdit设置为所选值。我不希望每个QLineEdit都有一个QFileDialog,因为它不是干的。问题不是很清楚,如果我理解正确,您有以下选项: 使用lambda: 如果需要断开单个功能,这可能会变得很糟糕
f1btn.clicked.connect(lambda: self.selectFile(self.file1))
f2btn.clicked.connect(lambda: self.selectFile(self.file2))
定义两个回调函数
这和你试图避免的几乎是一样的
def file1_select(self):
self.selectFile(self, self.file1)
def file2_select(self):
self.selectFile(self, self.file2)
您可以对此进行解释或给出更好的说明,或者在此处查看QFileDialog教程中的示例:。作者在涵盖包括Qt5在内的许多窗口框架的基础知识方面做得非常好。你想同时选择还是逐个选择?你可以更好地设计你的界面,因为有些小部件是重叠的。我想单独选择它们。所以我猜python UI编程一点也不枯燥?每个元素都有自己的draw元素和click元素?@DeniseMauldin它不是关于Python UI,而是关于PyQt/Qt和OO UI,每个UI组件都是一个独立的对象(小部件),其行为是独立的,在许多其他UI框架中,你会发现同样的“问题”。