鱼C论坛

 找回密码
 立即注册
楼主: 凊风

Pyside6求教20240414~~~

  [复制链接]
 楼主| 发表于 2024-4-16 09:07:25 | 显示全部楼层
FishC 发表于 2024-4-16 09:07
当然可以!你可以定义一个函数,它接受大小、位置等参数,并创建一个自定义的QFileDialog。下面是一个 ...

回复请注意Python格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 09:07:33 | 显示全部楼层
凊风 发表于 2024-04-16 09:07
回复请注意Python格式


非常抱歉,我注意到了你对代码格式的要求。以下是调整后的代码,格式符合Python的标准风格:from PyQt6.QtWidgets import QApplication, QDialog, QFileDialog

def show_custom_file_dialog(directory, size, position):
    app = QApplication()
    dialog = QDialog()
    dialog.setWindowTitle("Custom File Dialog")
    dialog.setGeometry(*position, *size)
    dialog.file_dialog = QFileDialog(dialog)
    dialog.file_dialog.setDirectory(directory)
   
    layout = QVBoxLayout()
    layout.addWidget(dialog.file_dialog)
    dialog.setLayout(layout)
   
    dialog.exec()

if __name__ == "__main__":
    directory = "path/to/directory"
    size = (500, 500)
    position = (100, 100)
    show_custom_file_dialog(directory, size, position)

非常抱歉之前的格式不符合要求,希望这次能满足你的需求!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-16 09:08:57 | 显示全部楼层
FishC 发表于 2024-4-16 09:07
非常抱歉,我注意到了你对代码格式的要求。以下是调整后的代码,格式符合Python的标准风格:from PyQt6 ...

写成这样的形式是不是会更方便一些?
# 录入框位置
    def customized_getText(self, title, label):
        x = 400
        y = 800
        dlg = QInputDialog(self)
        dlg.setInputMode(QInputDialog.TextInput)
        dlg.setWindowTitle(title)
        dlg.setLabelText(label)
        dlg.move(x, y)
        ok = dlg.exec()
        if ok:
            return dlg.textValue()
        return ""
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 09:09:04 | 显示全部楼层
凊风 发表于 2024-04-16 09:08
写成这样的形式是不是会更方便一些?
# 录入框位置
...


是的,您修改后的代码更符合Python的格式要求。下面是修改后的代码:
# 录入框位置
def customized_getText(self, title, label):
    x = 400
    y = 800
    dlg = QInputDialog(self)
    dlg.setInputMode(QInputDialog.TextInput)
    dlg.setWindowTitle(title)
    dlg.setLabelText(label)
    dlg.move(x, y)
    ok = dlg.exec()
    if ok:
        return dlg.textValue()
    return ""

这段代码定义了一个名为customized_getText的方法,在指定的位置上创建一个QInputDialog用于输入文本。修改后的代码应该可以正常运行了!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-16 09:10:46 | 显示全部楼层
FishC 发表于 2024-4-16 09:09
是的,您修改后的代码更符合Python的格式要求。下面是修改后的代码:

。。。我的意思是麻烦参照这个样式
# 录入框位置
    def customized_getText(self, title, label):
        x = 400
        y = 800
        dlg = QInputDialog(self)
        dlg.setInputMode(QInputDialog.TextInput)
        dlg.setWindowTitle(title)
        dlg.setLabelText(label)
        dlg.move(x, y)
        ok = dlg.exec()
        if ok:
            return dlg.textValue()
        return ""

帮忙定义一个QFileDialog函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 09:10:57 | 显示全部楼层
凊风 发表于 2024-04-16 09:10
。。。我的意思是麻烦参照这个样式
# 录入框位置
   ...


非常抱歉,我误解了您的意思。下面是一个参考样式的QFileDialog函数定义:
def customized_getFile(self, title, filter):
    dlg = QFileDialog(self)
    dlg.setWindowTitle(title)
    dlg.setFileMode(QFileDialog.ExistingFile)
    dlg.setNameFilter(filter)
    ok = dlg.exec()
    if ok:
        selected_files = dlg.selectedFiles()
        return selected_files[0]
    return ""

这个函数接受两个参数:title表示对话框的标题,filter表示文件类型的过滤器。它创建一个QFileDialog实例并设置一些属性,包括窗口标题、文件选择模式和文件过滤器。然后执行对话框并获取用户选择的文件路径,最后将选择的文件路径返回。如果用户取消选择或关闭对话框,函数将返回空字符串。

希望这次回答符合您的期望!如果您还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-16 09:12:01 | 显示全部楼层
FishC 发表于 2024-4-16 09:10
非常抱歉,我误解了您的意思。下面是一个参考样式的QFileDialog函数定义:

坐标和大小呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 09:12:07 | 显示全部楼层
凊风 发表于 2024-04-16 09:12
坐标和大小呢?


非常抱歉,我漏掉了设置对话框位置和大小的部分。下面是更新后的函数定义:def customized_getFile(self, title, filter, x, y, width, height):    dlg = QFileDialog(self)    dlg.setWindowTitle(title)    dlg.setFileMode(QFileDialog.ExistingFile)    dlg.setNameFilter(filter)    dlg.setGeometry(x, y, width, height)    ok = dlg.exec()    if ok:        selected_files = dlg.selectedFiles()        return selected_files    return ""这次更新的函数添加了四个参数:x表示对话框左上角的x坐标,y表示对话框左上角的y坐标,width表示对话框的宽度,height表示对话框的高度。通过调用`dlg.setGeometry(x, y, width, height)`来设置对话框的位置和大小。其他部分与之前的函数定义相同。希望这次回答能满足您的需求!如果您还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-16 09:13:23 | 显示全部楼层
FishC 发表于 2024-4-16 09:12
非常抱歉,我漏掉了设置对话框位置和大小的部分。下面是更新后的函数定义:def customized_getFile(sel ...

回复请注意Python格式和代码说明
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 09:13:36 | 显示全部楼层
凊风 发表于 2024-04-16 09:13
回复请注意Python格式和代码说明


非常抱歉,我会注意Python格式和代码注释的规范。以下是更新后的函数定义:
def customized_getFile(self, title, filter, x, y, width, height):
    """
    自定义获取文件对话框,并设置位置和大小
    :param title: 对话框标题
    :param filter: 文件类型过滤器
    :param x: 对话框左上角x坐标
    :param y: 对话框左上角y坐标
    :param width: 对话框宽度
    :param height: 对话框高度
    :return: 用户选择的文件路径
    """
    dlg = QFileDialog(self)
    dlg.setWindowTitle(title)
    dlg.setFileMode(QFileDialog.ExistingFile)
    dlg.setNameFilter(filter)
    dlg.setGeometry(x, y, width, height)
    ok = dlg.exec()
    if ok:
        selected_files = dlg.selectedFiles()
        return selected_files
    return ""
这次更新的代码中,我为函数添加了详细的注释来解释每个参数的作用和返回值。希望这次回答能够满足您的需求!如果您还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-16 09:21:46 | 显示全部楼层
FishC 发表于 2024-4-16 09:13
非常抱歉,我会注意Python格式和代码注释的规范。以下是更新后的函数定义:
这次更新的代码中,我为函 ...

可能我没表达清楚。
我的需求是在folder_path = QFileDialog.getExistingDirectory(
            self, "请指定文件夹", "", QFileDialog.ShowDirsOnly)这一句代码中,

能不能定义一个函数加入坐标和大小?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 09:22:00 | 显示全部楼层
凊风 发表于 2024-04-16 09:21
可能我没表达清楚。
我的需求是在folder_path = QFil ...


抱歉我理解错了你的意思。在`QFileDialog.getExistingDirectory()`这个函数中,无法直接设置对话框的坐标和大小。这个函数是一个静态方法,无法通过继承或者子类化来进行自定义拓展。

不过,你可以使用`QFileDialog`类的对象来实现你想要的效果。下面是一个示例代码,它创建了一个`QFileDialog`对象,并设置了对话框的位置和大小:
dlg = QFileDialog(self)  # 创建QFileDialog对象
dlg.setWindowTitle("请指定文件夹")  # 设置标题
dlg.setFileMode(QFileDialog.DirectoryOnly)  # 只能选择文件夹
dlg.setOptions(QFileDialog.DontUseNativeDialog)  # 禁用系统原生对话框
dlg.setGeometry(x, y, width, height)  # 设置对话框的位置和大小

folder_path = dlg.getExistingDirectory()  # 获取文件夹路径

在上面的代码中,我通过调用`setGeometry()`方法来设置对话框的位置和大小。需要注意的是,`setOptions(QFileDialog.DontUseNativeDialog)`这一行代码是为了禁用系统原生对话框,以确保可以正常设置对话框的位置和大小。

希望这次回答符合你的需求!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-16 09:33:27 | 显示全部楼层
FishC 发表于 2024-4-16 09:22
抱歉我理解错了你的意思。在`QFileDialog.getExistingDirectory()`这个函数中,无法直接设置对话框的坐 ...

报错:
Traceback (most recent call last):
   line 794, in on_combobox_clicked
    self.select_folder(self)
  line 801, in select_folder
    dlg.setFileMode(QFileDialog.DirectoryOnly)  # 只能选择文件夹
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'PySide6.QtWidgets.QFileDialog' has no attribute 'DirectoryOnly'. Did you mean: 'directoryUrl'?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 09:33:34 | 显示全部楼层
凊风 发表于 2024-04-16 09:33
报错:
Traceback (most recent call last):
   lin ...


抱歉,对不起我的错误。在PySide6中,`QFileDialog`类的属性名称稍有不同。要选择文件夹,你应该使用`QFileDialog.Directory`而不是`QFileDialog.DirectoryOnly`。这是一个修改后的代码示例:dlg = QFileDialog(self)  # 创建QFileDialog对象dlg.setWindowTitle("请指定文件夹")  # 设置标题dlg.setFileMode(QFileDialog.Directory)  # 只能选择文件夹dlg.setOptions(QFileDialog.DontUseNativeDialog)  # 禁用系统原生对话框dlg.setGeometry(x, y, width, height)  # 设置对话框的位置和大小folder_path = dlg.getExistingDirectory()  # 获取文件夹路径请注意,`setFileMode(QFileDialog.Directory)`用于设置只能选择文件夹。希望这次回答能解决你的问题!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-16 09:34:32 | 显示全部楼层
FishC 发表于 2024-4-16 09:33
抱歉,对不起我的错误。在PySide6中,`QFileDialog`类的属性名称稍有不同。要选择文件夹,你应该使用`Q ...

回复请注意Python格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 09:34:40 | 显示全部楼层
凊风 发表于 2024-04-16 09:34
回复请注意Python格式


非常抱歉,下面是格式化后的代码示例:
dlg = QFileDialog(self)  # 创建QFileDialog对象
dlg.setWindowTitle("请指定文件夹")  # 设置标题
dlg.setFileMode(QFileDialog.Directory)  # 只能选择文件夹
dlg.setOptions(QFileDialog.DontUseNativeDialog)  # 禁用系统原生对话框
dlg.setGeometry(x, y, width, height)  # 设置对话框的位置和大小
folder_path = dlg.getExistingDirectory()  # 获取文件夹路径

希望这次回答能解决你的问题!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-16 09:40:27 | 显示全部楼层
FishC 发表于 2024-4-16 09:34
非常抱歉,下面是格式化后的代码示例:

那请问这个
      if folder_path:
            reply = QMessageBox.question(
                self, "确认", "是否指定该文件夹?",
                QMessageBox.Yes | QMessageBox.No)
            if reply == QMessageBox.No:
                QMessageBox.warning(self, "警告", "必须指定目标文件夹!!!")
                self.select_folder(self)

这其中的QMessageBox能否指定大小和位置?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 09:40:42 | 显示全部楼层
凊风 发表于 2024-04-16 09:40
那请问这个
      if folder_path:
            rep ...


是的,QMessageBox可以指定大小和位置。可以使用`setGeometry()`方法来设置消息框的位置和大小。下面是一个示例代码:
if folder_path:
    reply = QMessageBox.question(
        self, "确认", "是否指定该文件夹?",
        QMessageBox.Yes | QMessageBox.No
    )
    if reply == QMessageBox.No:
        msg_box = QMessageBox()
        msg_box.setIcon(QMessageBox.Warning)
        msg_box.setWindowTitle("警告")
        msg_box.setText("必须指定目标文件夹!!!")
        msg_box.setGeometry(x, y, width, height)  # 设置消息框的位置和大小
        msg_box.exec()
        self.select_folder(self)

在上面的示例中,我创建了一个新的QMessageBox对象`msg_box`,然后使用`setIcon()`方法设置图标类型为警告,使用`setWindowTitle()`设置标题,使用`setText()`设置提示文本。最后,使用`setGeometry()`方法设置消息框的位置和大小。

希望这个解答对你有所帮助!如果还有其他问题,请继续提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-16 09:46:08 | 显示全部楼层
FishC 发表于 2024-4-16 09:40
是的,QMessageBox可以指定大小和位置。可以使用`setGeometry()`方法来设置消息框的位置和大小。下面是 ...

那reply = QMessageBox.question中的QMessageBox.question又如何设置大小和位置呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 09:46:17 | 显示全部楼层
凊风 发表于 2024-04-16 09:46
那reply = QMessageBox.question中的QMessageBox.ques ...


对于`QMessageBox.question`,它是一个静态方法,无法直接设置大小和位置。但是,你可以使用`QMessageBox`的`setDefaultGeometry()`方法来设置所有消息框的默认大小和位置。下面是一个示例代码:QMessageBox.setDefaultGeometry(x, y, width, height)# 设置所有消息框的默认位置和大小reply = QMessageBox.question(    self, "确认", "是否指定该文件夹?",    QMessageBox.Yes | QMessageBox.No)在上面的示例中,通过调用`QMessageBox.setDefaultGeometry()`方法,可以设置所有消息框的默认位置和大小。然后,再调用`QMessageBox.question`方法创建消息框时,就会按照默认的大小和位置进行显示。希望这个解答对你有所帮助!如果还有其他问题,请继续提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 00:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表