鱼C论坛

 找回密码
 立即注册
查看: 195|回复: 19

Pyside6求教~~

[复制链接]
发表于 2024-3-28 10:08:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有个老问题还没解决:

请问
            while True:
                rule, ok = QInputDialog.getText(self, '规则录入',
                                                '请录入规则。回车持续录入,录N退出:')

                if rule.upper() == 'N':
                    break


这个录入框的位置怎么设置啊,它默认自动屏幕居中,挡住视线了,我想给它一个坐标。。。。


回复请注意Python格式

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-28 10:08:57 | 显示全部楼层
想给QInputDialog设置一个坐标,可以使用move()方法来实现。move()方法用于将控件移动到指定的位置。具体来说,你需要调用QInputDialog的实例对象,然后使用move()方法来设置其位置。下面是一个示例:

  1. from PySide6.QtWidgets import QApplication, QMainWindow, QInputDialog

  2. class MyWindow(QMainWindow):
  3.     def __init__(self):
  4.         super().__init__()
  5.         self.initUI()

  6.     def initUI(self):
  7.         self.setGeometry(100, 100, 300, 200)  # 设置主窗口大小和位置

  8.     def showDialog(self):
  9.         dialog = QInputDialog(self)
  10.         dialog.move(200, 200)  # 设置QInputDialog的位置
  11.         rule, ok = dialog.getText(self, '规则录入', '请录入规则。回车持续录入,录N退出:')

  12.         if ok and rule.upper() == 'N':
  13.             self.close()

  14. if __name__ == '__main__':
  15.     app = QApplication([])
  16.     window = MyWindow()
  17.     window.show()
  18.     window.showDialog()
  19.     app.exec()
复制代码


在上述代码中,我们创建了一个自定义的`MyWindow`类,并在其中添加了一个`showDialog()`方法。方法内部首先创建了一个`QInputDialog`对话框,然后使用`move()`方法将其移动到指定位置(此处为(200, 200))。最后,通过调用对话框的`getText()`方法获取输入的规则,判断是否退出程序。

希望这个示例能够帮助你解决问题!如果还有其他疑问,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-3-28 10:15:08 | 显示全部楼层
FishC 发表于 2024-3-28 10:08
想给QInputDialog设置一个坐标,可以使用move()方法来实现。move()方法用于将控件移动到指定的位置。具体来 ...

可以用Pyside6编写一个可以传坐标的dialog.getText函数吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-28 10:15:27 | 显示全部楼层
凊风 发表于 2024-03-28 10:15
可以用Pyside6编写一个可以传坐标的dialog.getText函 ...


很抱歉,Pyside6的QInputDialog并没有直接提供传入坐标的功能。但是,我们可以自己创建一个自定义的对话框来实现这个功能。

下面是一个使用Pyside6编写的自定义对话框的示例代码,其中包含一个可以传入坐标的getText()函数:

  1. from PySide6.QtWidgets import QApplication, QDialog, QLabel, QLineEdit, QVBoxLayout, QPushButton

  2. class CustomInputDialog(QDialog):
  3.     def __init__(self, parent=None, x=0, y=0):
  4.         super().__init__(parent)
  5.         self.setWindowTitle("自定义输入对话框")
  6.         self.move(x, y)  # 设置对话框的位置

  7.         self.label = QLabel("请输入规则:", self)
  8.         self.text_edit = QLineEdit(self)
  9.         self.ok_button = QPushButton("确定", self)

  10.         layout = QVBoxLayout(self)
  11.         layout.addWidget(self.label)
  12.         layout.addWidget(self.text_edit)
  13.         layout.addWidget(self.ok_button)

  14.         self.ok_button.clicked.connect(self.accept)

  15.     def getText(self):
  16.         if self.exec() == QDialog.Accepted:
  17.             return self.text_edit.text()
  18.         else:
  19.             return None

  20. if __name__ == "__main__":
  21.     app = QApplication()
  22.     dialog = CustomInputDialog(x=200, y=200)
  23.     rule = dialog.getText()
  24.     if rule is not None:
  25.         print("输入的规则是:", rule)
  26.     app.exec()
复制代码


在上述代码中,我们首先自定义了一个`CustomInputDialog`对话框类,继承自`QDialog`。我们在构造函数中添加了一个`x`和`y`参数,用于设置对话框的位置。然后,我们创建了一个标签`QLabel`、一个文本输入框`QLineEdit`和一个按钮`QPushButton`,并将它们添加到布局中。最后,通过`getText()`函数获取用户输入的规则。

在主程序中,我们创建了一个`CustomInputDialog`对象,并传入了坐标(200, 200)。然后调用`getText()`函数获取用户输入的规则,并打印出来。

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

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

使用道具 举报

 楼主| 发表于 2024-3-28 10:19:25 | 显示全部楼层
FishC 发表于 2024-3-28 10:15
很抱歉,Pyside6的QInputDialog并没有直接提供传入坐标的功能。但是,我们可以自己创建一个自定义的对 ...

我是需要在一个窗体中移动一下dialog.getText的位置(因为它自动居中,挡住了后面显示的内容)。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-28 10:19:37 | 显示全部楼层
凊风 发表于 2024-03-28 10:19
我是需要在一个窗体中移动一下dialog.getText的位置( ...


非常抱歉对之前的理解有所误解。要在一个窗体中移动`dialog.getText()`对话框的位置,我们需要使用`.move()`方法将其移动到我们想要的位置。下面是一个示例代码:from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QInputDialogclass MyWindow(QMainWindow):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        self.setGeometry(100, 100, 300, 200)        button = QPushButton("获取规则", self)        button.clicked.connect(self.showDialog)        button.move(50, 50)  # 将按钮移动到指定位置    def showDialog(self):        dialog = QInputDialog(self)        dialog.move(200, 200)  # 将QInputDialog移动到指定位置        rule, ok = dialog.getText(self, '规则录入', '请录入规则。回车持续录入,录N退出:')        if ok and rule.upper() == 'N':            self.close()if __name__ == '__main__':    app = QApplication()    window = MyWindow()    window.show()    app.exec_()在上述代码中,我们首先创建了一个自定义的`MyWindow`类,并在其中添加了一个按钮。我们通过调用按钮的`move()`方法将其移动到(50, 50)的位置。然后,在`showDialog()`方法中,我们创建了一个`QInputDialog`对话框,并通过调用对话框的`move()`方法将其移动到(200, 200)的位置。希望这个示例能够解决你的问题!如果还有其他疑问,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-3-28 10:20:19 | 显示全部楼层
FishC 发表于 2024-3-28 10:19
非常抱歉对之前的理解有所误解。要在一个窗体中移动`dialog.getText()`对话框的位置,我们需要使用`.mo ...

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

使用道具 举报

发表于 2024-3-28 10:20:35 | 显示全部楼层
凊风 发表于 2024-03-28 10:20
回复请注意Python格式


非常抱歉,以下是格式正确的代码示例:

  1. from PySide6.QtCore import Qt
  2. from PySide6.QtWidgets import QApplication, QMainWindow, QInputDialog, QPushButton

  3. class MyWindow(QMainWindow):
  4.     def __init__(self):
  5.         super().__init__()
  6.         self.initUI()

  7.     def initUI(self):
  8.         self.setGeometry(100, 100, 300, 200)
  9.         button = QPushButton("获取规则", self)
  10.         button.clicked.connect(self.showDialog)
  11.         button.move(50, 50)

  12.     def showDialog(self):
  13.         dialog = QInputDialog(self)
  14.         dialog.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowStaysOnTopHint)  # 确保对话框始终在顶层显示
  15.         dialog.move(200, 200)
  16.         rule, ok = dialog.getText(self, '规则录入', '请录入规则。回车持续录入,录N退出:')
  17.         if ok and rule.upper() == 'N':
  18.             self.close()

  19. if __name__ == '__main__':
  20.     app = QApplication([])
  21.     window = MyWindow()
  22.     window.show()
  23.     app.exec()
复制代码


在这个示例中,我们将对话框的位置移动到了(200, 200),并使用`setWindowFlags()`方法设置对话框的窗口标志,以确保对话框始终在顶层显示。这样就可以避免挡住后面显示的内容了。希望这次能够满足你的需求!如果还有其他问题,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-3-28 10:29:42 | 显示全部楼层
FishC 发表于 2024-3-28 10:20
非常抱歉,以下是格式正确的代码示例:

能不能写成可以传坐标进去的dialog.getText函数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-28 10:29:56 | 显示全部楼层
凊风 发表于 2024-03-28 10:29
能不能写成可以传坐标进去的dialog.getText函数?


当然可以!你可以自定义一个函数来实现传入坐标的功能。下面是一个示例代码:from PySide6.QtWidgets import QApplication, QMainWindow, QInputDialogclass MyWindow(QMainWindow):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        self.setGeometry(100, 100, 300, 200)    def showDialog(self, x, y):        dialog = CustomInputDialog(x, y, self)        rule, ok = dialog.getText(self, '规则录入', '请录入规则。回车持续录入,录N退出:')        if ok and rule.upper() == 'N':            self.close()class CustomInputDialog(QInputDialog):    def __init__(self, x, y, *args, **kwargs):        super().__init__(*args, **kwargs)        self.move(x, y)if __name__ == '__main__':    app = QApplication()    window = MyWindow()    window.show()    window.showDialog(200, 200)    app.exec()在这个示例中,我们创建了一个自定义的`CustomInputDialog`类,它继承自`QInputDialog`。在`CustomInputDialog`的构造函数中添加了两个额外的参数`x`和`y`,这样我们就可以在调用`CustomInputDialog`时传入坐标值。然后,在`showDialog()`方法中,我们创建了一个`CustomInputDialog`的实例,并传入了要设置的坐标值。希望这个示例能够满足你的需求!如果还有其他问题,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-3-28 10:30:42 | 显示全部楼层
FishC 发表于 2024-3-28 10:29
当然可以!你可以自定义一个函数来实现传入坐标的功能。下面是一个示例代码:from PySide6.QtWidgets i ...

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

使用道具 举报

发表于 2024-3-28 10:30:54 | 显示全部楼层
凊风 发表于 2024-03-28 10:30
回复请注意Python格式


非常抱歉,以下是更符合 Python 格式的示例代码:

  1. from PySide6.QtWidgets import QApplication, QMainWindow, QInputDialog


  2. class MyWindow(QMainWindow):
  3.     def __init__(self):
  4.         super().__init__()
  5.         self.initUI()

  6.     def initUI(self):
  7.         self.setGeometry(100, 100, 300, 200)  

  8.     def showDialog(self, x, y):
  9.         dialog = CustomInputDialog(x, y, self)
  10.         rule, ok = dialog.getText(self, '规则录入', '请录入规则。回车持续录入,录N退出:')
  11.         if ok and rule.upper() == 'N':
  12.             self.close()


  13. class CustomInputDialog(QInputDialog):
  14.     def __init__(self, x, y, *args, **kwargs):
  15.         super().__init__(*args, **kwargs)
  16.         self.move(x, y)


  17. if __name__ == '__main__':
  18.     app = QApplication()
  19.     window = MyWindow()
  20.     window.show()
  21.     window.showDialog(200, 200)
  22.     app.exec()
复制代码


再次抱歉给您带来困惑,希望这次的代码示例能够满足您的需求!如果还有其他问题,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-3-28 10:32:45 | 显示全部楼层
FishC 发表于 2024-3-28 10:30
非常抱歉,以下是更符合 Python 格式的示例代码:

能不能把( '规则录入', '请录入规则。回车持续录入,录N退出:')

这几个也写成可传入的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-28 10:33:03 | 显示全部楼层
凊风 发表于 2024-03-28 10:32
能不能把( '规则录入', '请录入规则。回车持续录入, ...


当然可以!你可以将这几个参数定义为`showDialog()`方法的参数,并在调用方法时传入。下面是修改后的代码示例:

  1. from PySide6.QtWidgets import QApplication, QMainWindow, QInputDialog

  2. class MyWindow(QMainWindow):
  3.     def __init__(self):
  4.         super().__init__()
  5.         self.initUI()

  6.     def initUI(self):
  7.         self.setGeometry(100, 100, 300, 200)

  8.     def showDialog(self, x, y, title, message):
  9.         dialog = CustomInputDialog(x, y, self)
  10.         rule, ok = dialog.getText(self, title, message)
  11.         if ok and rule.upper() == 'N':
  12.             self.close()

  13. class CustomInputDialog(QInputDialog):
  14.     def __init__(self, x, y, *args, **kwargs):
  15.         super().__init__(*args, **kwargs)
  16.         self.move(x, y)

  17. if __name__ == '__main__':
  18.     app = QApplication()
  19.     window = MyWindow()
  20.     window.show()
  21.     window.showDialog(200, 200, '规则录入', '请录入规则。回车持续录入,录N退出:')
  22.     app.exec()
复制代码


在上述代码中,我将`showDialog()`方法的参数中添加了`title`和`message`,并在调用`getText()`方法时将它们传入。这样就可以通过调用`showDialog()`方法时自定义标题和消息内容了。希望这次的修改能满足你的需求。如有其他问题,请随时提问!

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

使用道具 举报

 楼主| 发表于 2024-3-28 10:35:55 | 显示全部楼层
FishC 发表于 2024-3-28 10:33
当然可以!你可以将这几个参数定义为`showDialog()`方法的参数,并在调用方法时传入。下面是修改后的代 ...

为什么要class CustomInputDialog(QInputDialog):
    def __init__(self, x, y, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.move(x, y)
这一段呢?

这段是什么意思?  能不能整合进
def showDialog(self, x, y, title, message):
        dialog = CustomInputDialog(x, y, self)
        rule, ok = dialog.getText(self, title, message)
        if ok and rule.upper() == 'N':
            self.close()
这段中?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-28 10:36:10 | 显示全部楼层
凊风 发表于 2024-03-28 10:35
为什么要class CustomInputDialog(QInputDialog):
   ...


抱歉,我的回答有点误导性。确实可以整合进`showDialog()`方法中,不需要单独创建`CustomInputDialog`类。

下面是更新后的代码示例:

  1. from PySide6.QtWidgets import QApplication, QMainWindow, QInputDialog

  2. class MyWindow(QMainWindow):
  3.     def __init__(self):
  4.         super().__init__()
  5.         self.initUI()

  6.     def initUI(self):
  7.         self.setGeometry(100, 100, 300, 200)

  8.     def showDialog(self, x, y, title, message):
  9.         dialog = QInputDialog(self)
  10.         dialog.move(x, y)
  11.         rule, ok = dialog.getText(self, title, message)
  12.         if ok and rule.upper() == 'N':
  13.             self.close()

  14. if __name__ == '__main__':
  15.     app = QApplication()
  16.     window = MyWindow()
  17.     window.show()
  18.     window.showDialog(200, 200, '规则录入', '请录入规则。回车持续录入,录N退出:')
  19.     app.exec()
复制代码


在这个修改后的代码中,我们将`dialog`对象的创建和坐标设置直接放在了`showDialog()`方法内部。这样就不需要单独创建一个`CustomInputDialog`类了。

希望这次的解释能够更清楚明了。如果还有其他问题,请随时提问!感谢你的耐心和理解。

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

使用道具 举报

 楼主| 发表于 2024-3-28 10:51:20 | 显示全部楼层
FishC 发表于 2024-3-28 10:36
抱歉,我的回答有点误导性。确实可以整合进`showDialog()`方法中,不需要单独创建`CustomInputDialog` ...

我这样引用后:

    def showDialog(self, x, y, title, message):
        dialog = QInputDialog(self)
        dialog.move(x, y)
        rule, ok = dialog.getText(self, title, message)
        # if ok and rule.upper() == 'N':
        #     self.close()

            while True:
               
                self.showDialog(100, 100, '规则录入', ‘请录入规则。回车持续录入,录N退出:')

                if rule.upper() == 'N':
                    break
                if ok:

然后报错:

   if rule.upper() == 'N':
       ^^^^
NameError: name 'rule' is not defined. Did you mean: 'tuple'?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-28 10:51:38 | 显示全部楼层
凊风 发表于 2024-03-28 10:51
我这样引用后:

    def showDialog(self, x, y, t ...


抱歉,我在修改代码时疏忽了。在你的代码中,报错是因为`rule`变量在使用前未定义。这是因为在当前的代码逻辑中,`rule`变量只在`dialog.getText()`方法被调用时才会被赋值,而在`while`循环中使用`rule`变量时,它尚未被定义。

为了解决这个问题,你可以将`rule`变量的定义移到`while`循环之前,并将其初始值设置为空字符串。然后,在`while`循环内部再次调用`dialog.getText()`方法以更新`rule`的值。修改后的代码示例如下:

  1. def showDialog(self, x, y, title, message):
  2.     dialog = QInputDialog(self)
  3.     dialog.move(x, y)
  4.     rule = ""  # 将变量定义并初始化为空字符串
  5.     while True:
  6.         rule, ok = dialog.getText(self, title, message)  # 更新rule的值
  7.         if not ok:  # 如果点击取消按钮,则退出循环
  8.             break
  9.         if rule.upper() == 'N':
  10.             break
  11.     if rule.upper() == 'N':
  12.         self.close()
复制代码


这样修改后,`rule`变量就会在使用前被定义,并且在循环内部不断更新其值。如果点击取消按钮,循环会被打破并结束。

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

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

使用道具 举报

 楼主| 发表于 2024-3-28 11:44:05 | 显示全部楼层
FishC 发表于 2024-3-28 10:51
抱歉,我在修改代码时疏忽了。在你的代码中,报错是因为`rule`变量在使用前未定义。这是因为在当前的代 ...

不行,这个rule, ok = dialog.getText(self, title, message)的坐标设定问题还没解决,我改天再来问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-28 11:44:31 | 显示全部楼层
凊风 发表于 2024-03-28 11:44
不行,这个rule, ok = dialog.getText(self, title, m ...


非常抱歉,我之前的回答没有解决你的问题。如果你想要设置QInputDialog对话框的位置,可以使用`dialog.move()`方法来实现。下面是一个示例代码:

  1. from PySide6.QtWidgets import QApplication, QMainWindow, QInputDialog

  2. class MyWindow(QMainWindow):
  3.     def __init__(self):
  4.         super().__init__()
  5.         self.initUI()

  6.     def initUI(self):
  7.         self.setGeometry(100, 100, 300, 200)  # 设置主窗口大小和位置

  8.     def showDialog(self, x, y, title, message):
  9.         dialog = QInputDialog(self)
  10.         dialog.setWindowTitle(title)
  11.         dialog.setLabelText(message)
  12.         dialog.move(x, y)  # 设置QInputDialog的位置
  13.         rule, ok = dialog.getText()
  14.         if ok and rule.upper() == 'N':
  15.             self.close()

  16. if __name__ == '__main__':
  17.     app = QApplication()
  18.     window = MyWindow()
  19.     window.show()
  20.     window.showDialog(200, 200, '规则录入', '请录入规则。回车持续录入,录N退出:')
  21.     app.exec()
复制代码


在上述代码中,我们为`QInputDialog`设置了标题和提示信息,并使用`move()`方法将其移动到指定位置(此处为(200, 200))。然后,通过调用`getText()`方法获取输入的规则,判断是否退出程序。

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 16:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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