鱼C论坛

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

Pyside6求教20240414~~~

  [复制链接]
 楼主| 发表于 2024-4-16 09:47:09 | 显示全部楼层
FishC 发表于 2024-4-16 09:46
对于`QMessageBox.question`,它是一个静态方法,无法直接设置大小和位置。但是,你可以使用`QMessageB ...

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

使用道具 举报

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


非常抱歉给你带来困扰,下面是经过修正的代码示例:
from PySide6.QtWidgets import QApplication, QMessageBox, QWidget, QPushButton

QMessageBox.setDefaultGeometry(x, y, width, height)  # 设置所有消息框的默认位置和大小

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.exit_button = QPushButton("退出", self)
        self.exit_button.clicked.connect(self.confirm_exit)
        self.show()

    def confirm_exit(self):
        reply = QMessageBox.question(
            self, "确认", "是否要退出?", 
            QMessageBox.Yes | QMessageBox.No
        )

        if reply == QMessageBox.Yes:
            QApplication.instance().quit()

if __name__ == "__main__":
    app = QApplication()
    widget = MyWidget()
    app.exec()

在上面的代码中,通过`QMessageBox.setDefaultGeometry()`方法设置了消息框的默认位置和大小。然后,在`confirm_exit`函数中调用了`QMessageBox.question`方法创建了一个消息框。当用户点击消息框中的"Yes"按钮时,我们调用`QApplication.instance().quit()`方法来终止应用程序。

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

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

使用道具 举报

 楼主| 发表于 2024-4-16 09:49:15 | 显示全部楼层
FishC 发表于 2024-4-16 09:47
非常抱歉给你带来困扰,下面是经过修正的代码示例:

QMessageBox.setDefaultGeometry(x, y, width, height)  
# 设置所有消息框的默认位置和大小

能不能写成一个函数来方便调用?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 09:49:29 | 显示全部楼层
凊风 发表于 2024-04-16 09:49
QMessageBox.setDefaultGeometry(x, y, width, height ...


当然可以!你可以将设置默认消息框位置和大小的代码封装成一个函数来方便调用。下面是一个示例:from PySide6.QtWidgets import QApplication, QMessageBox, QWidget, QPushButtondef set_default_message_box_geometry(x, y, width, height):    QMessageBox.setDefaultGeometry(x, y, width, height)class MyWidget(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        self.exit_button = QPushButton("退出", self)        self.exit_button.clicked.connect(self.confirm_exit)        self.show()    def confirm_exit(self):        set_default_message_box_geometry(100, 100, 300, 200)        reply = QMessageBox.question(            self, "确认", "是否要退出?",             QMessageBox.Yes | QMessageBox.No        )        if reply == QMessageBox.Yes:            QApplication.instance().quit()if __name__ == "__main__":    app = QApplication()    widget = MyWidget()    app.exec()在上述代码中,我定义了一个名为`set_default_message_box_geometry`的函数,它接受四个参数:x、y、width和height,分别表示消息框的左上角坐标和宽度、高度。在`confirm_exit`函数中,调用了这个函数来设置默认消息框的位置和大小。这样,你就可以在其他地方也可以根据需要调用`set_default_message_box_geometry`函数来统一设置消息框的位置和大小。希望这次的回答对你有所帮助!如果还有其他问题,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-4-16 09:49:49 | 显示全部楼层
FishC 发表于 2024-4-16 09:49
当然可以!你可以将设置默认消息框位置和大小的代码封装成一个函数来方便调用。下面是一个示例:from P ...

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

使用道具 举报

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


非常抱歉,我会注意Python格式和代码说明。以下是根据您的要求进行了修改的示例代码:
from PySide6.QtWidgets import QApplication, QMessageBox, QWidget, QPushButton

def set_default_message_box_geometry(x, y, width, height):
    """
    设置所有消息框的默认位置和大小
    :param x: 消息框左上角的 x 坐标
    :param y: 消息框左上角的 y 坐标
    :param width: 消息框的宽度
    :param height: 消息框的高度
    """
    QMessageBox.setDefaultGeometry(x, y, width, height)

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.exit_button = QPushButton("退出", self)
        self.exit_button.clicked.connect(self.confirm_exit)
        self.show()

    def confirm_exit(self):
        set_default_message_box_geometry(100, 100, 300, 200)
        reply = QMessageBox.question(
            self, "确认", "是否要退出?",
            QMessageBox.Yes | QMessageBox.No
        )
        if reply == QMessageBox.Yes:
            QApplication.instance().quit()

if __name__ == "__main__":
    app = QApplication()
    widget = MyWidget()
    app.exec()

以上代码中,`set_default_message_box_geometry`函数用来设置消息框的默认位置和大小,并在函数注释中进行了说明。`MyWidget`类的`confirm_exit`方法中调用了该函数来设置消息框的位置和大小。

非常感谢您的指导,如果还有其他问题,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-4-16 09:55:45 | 显示全部楼层
FishC 发表于 2024-4-16 09:49
非常抱歉,我会注意Python格式和代码说明。以下是根据您的要求进行了修改的示例代码:

报错:
Traceback (most recent call last):
  line 782, in on_combobox_clicked
    self.select_folder(self)
  line 797, in select_folder
    self.set_default_message_box_geometry(100, 200, 80, 100)
TypeError: BaseWindow.set_default_message_box_geometry() takes 4 positional arguments but 5 were given
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


很抱歉,我在调用`set_default_message_box_geometry`方法时传入了一个多余的`self`参数。在类内部调用方法时,无需显式传递`self`参数,它会自动传递。请修改代码中的`self.set_default_message_box_geometry(100, 200, 80, 100)`为`set_default_message_box_geometry(100, 200, 80, 100)`。以下是修改后的示例代码:
from PySide6.QtWidgets import QApplication, QMessageBox, QWidget, QPushButton

def set_default_message_box_geometry(x, y, width, height):
    """
    设置所有消息框的默认位置和大小
    :param x: 消息框左上角的 x 坐标
    :param y: 消息框左上角的 y 坐标
    :param width: 消息框的宽度
    :param height: 消息框的高度
    """
    QMessageBox.setDefaultGeometry(x, y, width, height)

class BaseWindow(QWidget):
    def __init__(self):
        super().__init__()

class MyWidget(BaseWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.exit_button = QPushButton("退出", self)
        self.exit_button.clicked.connect(self.confirm_exit)
        self.show()

    def confirm_exit(self):
        set_default_message_box_geometry(100, 200, 80, 100)
        reply = QMessageBox.question(
            self, "确认", "是否要退出?",
            QMessageBox.Yes | QMessageBox.No
        )
        if reply == QMessageBox.Yes:
            QApplication.instance().quit()

if __name__ == "__main__":
    app = QApplication()
    widget = MyWidget()
    app.exec()

现在运行代码应该不会再报错了。再次感谢您的指导,如果还有其他问题,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-4-16 10:00:16 | 显示全部楼层
FishC 发表于 2024-4-16 09:55
很抱歉,我在调用`set_default_message_box_geometry`方法时传入了一个多余的`self`参数。在类内部调用 ...

我改成这样:
    def set_default_message_box_geometry(self, x, y, width, height):
        """
        设置所有消息框的默认位置和大小
        :param x: 消息框左上角的 x 坐标
        :param y: 消息框左上角的 y 坐标
        :param width: 消息框的宽度
        :param height: 消息框的高度
        """
        QMessageBox.setDefaultGeometry(self, x, y, width, height)

self.set_default_message_box_geometry(100, 200, 80, 100)

然后报错:
Traceback (most recent call last):
  line 782, in on_combobox_clicked
    self.select_folder(self)
line 797, in select_folder
    self.set_default_message_box_geometry(100, 200, 80, 100)
   line 128, in set_default_message_box_geometry
    QMessageBox.setDefaultGeometry(self, x, y, width, height)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'PySide6.QtWidgets.QMessageBox' has no attribute 'setDefaultGeometry'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 10:01:16 | 显示全部楼层
凊风 发表于 2024-04-16 10:00
我改成这样:
    def set_default_message_box_geom ...


很抱歉,`QMessageBox`类没有`setDefaultGeometry`方法。如果要设置所有消息框的默认位置和大小,可以使用`QMessageBox.setDefaultMessageBoxSize`方法。修改代码如下:from PySide6.QtWidgets import QApplication, QMessageBox, QWidget, QPushButtonclass BaseWindow(QWidget):    def __init__(self):        super().__init__()    def set_default_message_box_geometry(self, x, y, width, height):        """        设置所有消息框的默认位置和大小        :param x: 消息框左上角的 x 坐标        :param y: 消息框左上角的 y 坐标        :param width: 消息框的宽度        :param height: 消息框的高度        """        QMessageBox.setDefaultMessageBoxSize(width, height)class MyWidget(BaseWindow):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        self.exit_button = QPushButton("退出", self)        self.exit_button.clicked.connect(self.confirm_exit)        self.show()    def confirm_exit(self):        self.set_default_message_box_geometry(100, 200, 80, 100)        reply = QMessageBox.question(            self, "确认", "是否要退出?",            QMessageBox.Yes | QMessageBox.No        )        if reply == QMessageBox.Yes:            QApplication.instance().quit()if __name__ == "__main__":    app = QApplication()    widget = MyWidget()    app.exec()运行代码应该不会再报错了。请注意,修改后的代码将`setDefaultGeometry`改为`setDefaultMessageBoxSize`。希望这能帮助到你,如果还有其他问题,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-4-16 10:01:38 | 显示全部楼层
FishC 发表于 2024-4-16 10:01
很抱歉,`QMessageBox`类没有`setDefaultGeometry`方法。如果要设置所有消息框的默认位置和大小,可以 ...

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

使用道具 举报

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


非常抱歉,我在回复中没有按照正确的Python代码格式和注释说明。以下是修改后的代码,包含了正确的格式和注释说明:
from PySide6.QtWidgets import QApplication, QMessageBox, QWidget, QPushButton

class BaseWindow(QWidget):
    def __init__(self):
        super().__init__()

    def set_default_message_box_geometry(self, x, y, width, height):
        """
        设置所有消息框的默认位置和大小
        :param x: 消息框左上角的 x 坐标
        :param y: 消息框左上角的 y 坐标
        :param width: 消息框的宽度
        :param height: 消息框的高度
        """
        QMessageBox.setDefaultMessageBoxSize(width, height)

class MyWidget(BaseWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.exit_button = QPushButton("退出", self)
        self.exit_button.clicked.connect(self.confirm_exit)
        self.show()

    def confirm_exit(self):
        self.set_default_message_box_geometry(100, 200, 80, 100)
        reply = QMessageBox.question(
            self, "确认", "是否要退出?",
            QMessageBox.Yes | QMessageBox.No
        )
        if reply == QMessageBox.Yes:
            QApplication.instance().quit()

if __name__ == "__main__":
    app = QApplication()
    widget = MyWidget()
    app.exec()

非常抱歉给你带来了困扰,并感谢你的指出。如果还有其他问题,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-4-16 10:04:36 | 显示全部楼层
FishC 发表于 2024-4-16 10:01
非常抱歉,我在回复中没有按照正确的Python代码格式和注释说明。以下是修改后的代码,包含了正确的格式 ...

报错:
Traceback (most recent call last):
   line 782, in on_combobox_clicked
    self.select_folder(self)
   line 797, in select_folder
    self.set_default_message_box_geometry(100, 200, 80, 100)
   line 128, in set_default_message_box_geometry
    QMessageBox.setDefaultMessageBoxSize(width, height)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'PySide6.QtWidgets.QMessageBox' has no attribute 'setDefaultMessageBoxSize'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


抱歉,我之前的回答中有错误。PySide6中没有`setDefaultMessageBoxSize`这个方法来设置消息框的默认大小。我们可以通过创建一个自定义的消息框来解决这个问题。以下是修改后的代码:
from PySide6.QtWidgets import QApplication, QMessageBox, QWidget, QPushButton

class BaseWindow(QWidget):
    def __init__(self):
        super().__init__()

    def set_default_message_box_geometry(self, msg_box, x, y, width, height):
        """
        设置消息框的位置和大小
        :param msg_box: 消息框对象
        :param x: 消息框左上角的 x 坐标
        :param y: 消息框左上角的 y 坐标
        :param width: 消息框的宽度
        :param height: 消息框的高度
        """
        msg_box.setGeometry(x, y, width, height)

class MyWidget(BaseWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.exit_button = QPushButton("退出", self)
        self.exit_button.clicked.connect(self.confirm_exit)
        self.show()

    def confirm_exit(self):
        msg_box = QMessageBox(self)
        self.set_default_message_box_geometry(msg_box, 100, 200, 200, 150)
        reply = msg_box.question(
            self, "确认", "是否要退出?",
            QMessageBox.Yes | QMessageBox.No
        )
        if reply == QMessageBox.Yes:
            QApplication.instance().quit()

if __name__ == "__main__":
    app = QApplication([])
    widget = MyWidget()
    app.exec()

在这个修改后的代码中,我们创建了一个自定义的`set_default_message_box_geometry`方法,用于设置消息框的位置和大小。在`confirm_exit`方法中,我们创建了一个`QMessageBox`对象,并将其传递给`set_default_message_box_geometry`方法来设置位置和大小。这样就能实现你想要的效果。

非常抱歉给你带来了困扰,并感谢你的指出。如果还有其他问题,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-4-16 10:07:59 | 显示全部楼层
FishC 发表于 2024-4-16 10:04
抱歉,我之前的回答中有错误。PySide6中没有`setDefaultMessageBoxSize`这个方法来设置消息框的默认大 ...

没用,消息框的位置和大小都不会随 x, y, width, height的改变而改变.......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 10:08:12 | 显示全部楼层
凊风 发表于 2024-04-16 10:07
没用,消息框的位置和大小都不会随 x, y, width, heig ...


非常抱歉,我之前的回答中有误导你。PySide6中没有提供直接设置消息框位置和大小的方法。要自定义消息框的位置和大小,你可以使用`move()`方法来设置消息框的位置,并使用`resize()`方法来设置消息框的大小。以下是修改后的代码示例:from PySide6.QtWidgets import QApplication, QMessageBox, QWidget, QPushButtonclass BaseWindow(QWidget):    def __init__(self):        super().__init__()    def set_default_message_box_geometry(self, msg_box, x, y, width, height):        """        设置消息框的位置和大小        :param msg_box: 消息框对象        :param x: 消息框左上角的 x 坐标        :param y: 消息框左上角的 y 坐标        :param width: 消息框的宽度        :param height: 消息框的高度        """        msg_box.move(x, y)        msg_box.resize(width, height)class MyWidget(BaseWindow):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        self.exit_button = QPushButton("退出", self)        self.exit_button.clicked.connect(self.confirm_exit)        self.show()    def confirm_exit(self):        msg_box = QMessageBox(self)        self.set_default_message_box_geometry(msg_box, 100, 200, 200, 150)        reply = msg_box.question(            self, "确认", "是否要退出?",            QMessageBox.Yes | QMessageBox.No        )        if reply == QMessageBox.Yes:            QApplication.instance().quit()if __name__ == "__main__":    app = QApplication()    widget = MyWidget()    app.exec()在这个修改后的代码中,我们使用`move()`方法设置消息框的位置,使用`resize()`方法设置消息框的大小。希望这次能解决你的问题。如果还有其他疑问,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-4-16 10:09:34 | 显示全部楼层
FishC 发表于 2024-4-16 10:08
非常抱歉,我之前的回答中有误导你。PySide6中没有提供直接设置消息框位置和大小的方法。要自定义消息 ...

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

使用道具 举报

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


非常抱歉,我会注意格式和代码说明。以下是修正后的代码示例:
from PySide6.QtWidgets import QApplication, QMessageBox, QWidget, QPushButton

class BaseWindow(QWidget):
    def __init__(self):
        super().__init__()

    def set_default_message_box_geometry(self, msg_box, x, y, width, height):
        """
        设置消息框的位置和大小
        :param msg_box: 消息框对象
        :param x: 消息框左上角的 x 坐标
        :param y: 消息框左上角的 y 坐标
        :param width: 消息框的宽度
        :param height: 消息框的高度
        """
        msg_box.move(x, y)
        msg_box.resize(width, height)

class MyWidget(BaseWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.exit_button = QPushButton("退出", self)
        self.exit_button.clicked.connect(self.confirm_exit)
        self.show()

    def confirm_exit(self):
        msg_box = QMessageBox(self)
        self.set_default_message_box_geometry(msg_box, 100, 200, 200, 150)
        reply = msg_box.question(
            self, "确认", "是否要退出?",
            QMessageBox.Yes | QMessageBox.No
        )
        if reply == QMessageBox.Yes:
            QApplication.instance().quit()

if __name__ == "__main__":
    app = QApplication()
    widget = MyWidget()
    app.exec()

希望这次满足你的要求。如果还有其他疑问,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-4-16 10:15:35 | 显示全部楼层
FishC 发表于 2024-4-16 10:09
非常抱歉,我会注意格式和代码说明。以下是修正后的代码示例:

奇怪,大小和位置仍然不发生改变....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 10:16:10 | 显示全部楼层
凊风 发表于 2024-04-16 10:15
奇怪,大小和位置仍然不发生改变....


非常抱歉,我的错误。看起来是因为我在`set_default_message_box_geometry`方法中不正确地使用了`move`和`resize`方法。在`PySide6.QtWidgets.QMessageBox`中,`move`和`resize`方法无法用于改变消息框的位置和大小。

要调整消息框的位置和大小,你可以使用`setGeometry`方法。以下是修改后的代码:
from PySide6.QtWidgets import QApplication, QMessageBox, QWidget, QPushButton

class BaseWindow(QWidget):
    def __init__(self):
        super().__init__()

    def set_default_message_box_geometry(self, msg_box, x, y, width, height):
        """
        设置消息框的位置和大小
        :param msg_box: 消息框对象
        :param x: 消息框左上角的 x 坐标
        :param y: 消息框左上角的 y 坐标
        :param width: 消息框的宽度
        :param height: 消息框的高度
        """
        msg_box.setGeometry(x, y, width, height)

class MyWidget(BaseWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.exit_button = QPushButton("退出", self)
        self.exit_button.clicked.connect(self.confirm_exit)
        self.show()

    def confirm_exit(self):
        msg_box = QMessageBox(self)
        self.set_default_message_box_geometry(msg_box, 100, 200, 200, 150)
        reply = msg_box.question(
            self, "确认", "是否要退出?",
            QMessageBox.Yes | QMessageBox.No
        )
        if reply == QMessageBox.Yes:
            QApplication.instance().quit()

if __name__ == "__main__":
    app = QApplication()
    widget = MyWidget()
    app.exec()

希望这次能够正常调整消息框的位置和大小。如果还有其他问题,请随时询问。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 20:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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