qdialog 返回值_PyQt5 中QDialog值传递

本文介绍了如何在PyQt5中使用QDialog类创建自定义对话框,通过QFileDialog和QInputDialog与主窗口交互,传递和接收参数。详细讲解了如何在对话框中设置文件路径,以及两种调用对话框获取返回值的方法:静态函数调用和直接实例化对话框。

在应用PyQt5设计GUI界面时,经常会遇到输入或选择多个参数的问题,把它写到一个窗体中,会显得主窗体很臃肿。所以一般是添加一个按钮,调用对话框,将这些参数选择放入弹出的对话框中,关闭对话框时将参数值返回给主窗体。实现方法是应用PyQt5中 PyQt5.QtWidgets中QDialog类。其中PyQt5内部实现了一些诸如QInputDialog等标准对话框,这些标准对话框都继承自QDialog。在另一些情况我们需要自己写一些自定义对话框并将对话框中的某些值传送到主窗口内。

例如,我在工程中需要通过对话框设置文件的路径并将参数传送到主窗口,可以选择内置的QInputDialog直接输入路径传送,也可以选择QFileDialog调用文件对话框选择文件直接返回文件绝对路径。在实际使用中我们常把这两种结合在一起使用。功能为打开一自定义对话框,可点击按钮调用QfileDialog调用文件对话框选择文件,文件路径返回到文本框上显示并传递到主窗口,也可通过再文本框内直接输入文件绝对路径。

class DbPathDialog(QDialog, Ui_dbpathDialog):

def __init__(self, parent=None):

super().__init__(parent)

self.setupUi(self) # 窗口界面

self.openfileButton.clicked.connect(self.set_db_path) # 定义了一个openfileButton 点击时将信号发送到self.set_db_path槽函数

self.filename = os.path.join(os.getcwd(), 'Setting.db') # 定义了一个文件的默认地址

if not os.path.exists(self.filename): # 当该路径不存在时调用self.set_db_path()

self.set_db_path()

else:

self.lineEdit.setText(self.filename) # 当该路径存在时文件路径默认为默认路径

@pyqtSlot() # 槽函数,okButton点击时触发

def on_okButton_clicked(self):

if not os.path.isfile(self.lineEdit.text()): # 判断路径是否是文件

info = self.lineEdit.text() + ' is not an available file'

prompt = QMessageBox.information(self, '提示', info, QMessageBox.Ok, QMessageBox.Ok)

self.set_db_path()

else:

self.close()

def set_db_path(self):

'''打开文件对话框,并把选择文件的路径设置再lineEdit文本输入框上'''

self.filename = QFileDialog.getOpenFileName(self,

r'选择配置文件',

r'',

r'db Files(*.db)')

if self.filename[0] != '':

self.lineEdit.setText(self.filename[0])

def db_path(self):

return self.lineEdit.text()

@staticmethod

def get_db_path(parent = None):

'''在静态函数中实例化该类,并调用.exec_()函数来显示执行这个对话框。实现值传递'''

dialog = DbPathDialog(parent)

result = dialog.exec_()

path = dialog.db_path()

return path

在主窗口中调用静态函数方法,就可以得到传递的参数值,代码如下:

1 path = DbPathDialog.get_db_path()

第二种调用方法:直接在主窗口程序中实例化该对话框,然后调用该对话框的函数来获取返回值。

1 dlg = DbPathDialog()

2 result = dlg.exec_()

3 path = dialog.db_path()

4 dlg.destroy()

这两种方法的本质都是实例化对话框类,调用该对话框的函数获取需要的值,而使用静态函数方法只是将这些过程进行的封装。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值