Pyside6求教~~
有个老问题还没解决:请问
while True:
rule, ok = QInputDialog.getText(self, '规则录入',
'请录入规则。回车持续录入,录N退出:')
if rule.upper() == 'N':
break
这个录入框的位置怎么设置啊,它默认自动屏幕居中,挡住视线了,我想给它一个坐标。。。。
回复请注意Python格式 想给QInputDialog设置一个坐标,可以使用move()方法来实现。move()方法用于将控件移动到指定的位置。具体来说,你需要调用QInputDialog的实例对象,然后使用move()方法来设置其位置。下面是一个示例:
from PySide6.QtWidgets import QApplication, QMainWindow, QInputDialog
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(100, 100, 300, 200)# 设置主窗口大小和位置
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()
window.showDialog()
app.exec()
在上述代码中,我们创建了一个自定义的`MyWindow`类,并在其中添加了一个`showDialog()`方法。方法内部首先创建了一个`QInputDialog`对话框,然后使用`move()`方法将其移动到指定位置(此处为(200, 200))。最后,通过调用对话框的`getText()`方法获取输入的规则,判断是否退出程序。
希望这个示例能够帮助你解决问题!如果还有其他疑问,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-28 10:08
想给QInputDialog设置一个坐标,可以使用move()方法来实现。move()方法用于将控件移动到指定的位置。具体来 ...
可以用Pyside6编写一个可以传坐标的dialog.getText函数吗? 凊风 发表于 2024-03-28 10:15
可以用Pyside6编写一个可以传坐标的dialog.getText函 ...
很抱歉,Pyside6的QInputDialog并没有直接提供传入坐标的功能。但是,我们可以自己创建一个自定义的对话框来实现这个功能。
下面是一个使用Pyside6编写的自定义对话框的示例代码,其中包含一个可以传入坐标的getText()函数:
from PySide6.QtWidgets import QApplication, QDialog, QLabel, QLineEdit, QVBoxLayout, QPushButton
class CustomInputDialog(QDialog):
def __init__(self, parent=None, x=0, y=0):
super().__init__(parent)
self.setWindowTitle("自定义输入对话框")
self.move(x, y)# 设置对话框的位置
self.label = QLabel("请输入规则:", self)
self.text_edit = QLineEdit(self)
self.ok_button = QPushButton("确定", self)
layout = QVBoxLayout(self)
layout.addWidget(self.label)
layout.addWidget(self.text_edit)
layout.addWidget(self.ok_button)
self.ok_button.clicked.connect(self.accept)
def getText(self):
if self.exec() == QDialog.Accepted:
return self.text_edit.text()
else:
return None
if __name__ == "__main__":
app = QApplication()
dialog = CustomInputDialog(x=200, y=200)
rule = dialog.getText()
if rule is not None:
print("输入的规则是:", rule)
app.exec()
在上述代码中,我们首先自定义了一个`CustomInputDialog`对话框类,继承自`QDialog`。我们在构造函数中添加了一个`x`和`y`参数,用于设置对话框的位置。然后,我们创建了一个标签`QLabel`、一个文本输入框`QLineEdit`和一个按钮`QPushButton`,并将它们添加到布局中。最后,通过`getText()`函数获取用户输入的规则。
在主程序中,我们创建了一个`CustomInputDialog`对象,并传入了坐标(200, 200)。然后调用`getText()`函数获取用户输入的规则,并打印出来。
希望这个示例能够满足你的需求!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-28 10:15
很抱歉,Pyside6的QInputDialog并没有直接提供传入坐标的功能。但是,我们可以自己创建一个自定义的对 ...
我是需要在一个窗体中移动一下dialog.getText的位置(因为它自动居中,挡住了后面显示的内容)。。。。 凊风 发表于 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-28 10:19
非常抱歉对之前的理解有所误解。要在一个窗体中移动`dialog.getText()`对话框的位置,我们需要使用`.mo ...
回复请注意Python格式
凊风 发表于 2024-03-28 10:20
回复请注意Python格式
非常抱歉,以下是格式正确的代码示例:
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QMainWindow, QInputDialog, QPushButton
class 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.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowStaysOnTopHint)# 确保对话框始终在顶层显示
dialog.move(200, 200)
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()
在这个示例中,我们将对话框的位置移动到了(200, 200),并使用`setWindowFlags()`方法设置对话框的窗口标志,以确保对话框始终在顶层显示。这样就可以避免挡住后面显示的内容了。希望这次能够满足你的需求!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-28 10:20
非常抱歉,以下是格式正确的代码示例:
能不能写成可以传坐标进去的dialog.getText函数?
凊风 发表于 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-28 10:29
当然可以!你可以自定义一个函数来实现传入坐标的功能。下面是一个示例代码:from PySide6.QtWidgets i ...
回复请注意Python格式 凊风 发表于 2024-03-28 10:30
回复请注意Python格式
非常抱歉,以下是更符合 Python 格式的示例代码:
from PySide6.QtWidgets import QApplication, QMainWindow, QInputDialog
class 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()
再次抱歉给您带来困惑,希望这次的代码示例能够满足您的需求!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-28 10:30
非常抱歉,以下是更符合 Python 格式的示例代码:
能不能把( '规则录入', '请录入规则。回车持续录入,录N退出:')
这几个也写成可传入的? 凊风 发表于 2024-03-28 10:32
能不能把( '规则录入', '请录入规则。回车持续录入, ...
当然可以!你可以将这几个参数定义为`showDialog()`方法的参数,并在调用方法时传入。下面是修改后的代码示例:
from PySide6.QtWidgets import QApplication, QMainWindow, QInputDialog
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(100, 100, 300, 200)
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()
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, '规则录入', '请录入规则。回车持续录入,录N退出:')
app.exec()
在上述代码中,我将`showDialog()`方法的参数中添加了`title`和`message`,并在调用`getText()`方法时将它们传入。这样就可以通过调用`showDialog()`方法时自定义标题和消息内容了。希望这次的修改能满足你的需求。如有其他问题,请随时提问!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 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()
这段中? 凊风 发表于 2024-03-28 10:35
为什么要class CustomInputDialog(QInputDialog):
...
抱歉,我的回答有点误导性。确实可以整合进`showDialog()`方法中,不需要单独创建`CustomInputDialog`类。
下面是更新后的代码示例:
from PySide6.QtWidgets import QApplication, QMainWindow, QInputDialog
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(100, 100, 300, 200)
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()
if __name__ == '__main__':
app = QApplication()
window = MyWindow()
window.show()
window.showDialog(200, 200, '规则录入', '请录入规则。回车持续录入,录N退出:')
app.exec()
在这个修改后的代码中,我们将`dialog`对象的创建和坐标设置直接放在了`showDialog()`方法内部。这样就不需要单独创建一个`CustomInputDialog`类了。
希望这次的解释能够更清楚明了。如果还有其他问题,请随时提问!感谢你的耐心和理解。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 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'? 凊风 发表于 2024-03-28 10:51
我这样引用后:
def showDialog(self, x, y, t ...
抱歉,我在修改代码时疏忽了。在你的代码中,报错是因为`rule`变量在使用前未定义。这是因为在当前的代码逻辑中,`rule`变量只在`dialog.getText()`方法被调用时才会被赋值,而在`while`循环中使用`rule`变量时,它尚未被定义。
为了解决这个问题,你可以将`rule`变量的定义移到`while`循环之前,并将其初始值设置为空字符串。然后,在`while`循环内部再次调用`dialog.getText()`方法以更新`rule`的值。修改后的代码示例如下:
def showDialog(self, x, y, title, message):
dialog = QInputDialog(self)
dialog.move(x, y)
rule = ""# 将变量定义并初始化为空字符串
while True:
rule, ok = dialog.getText(self, title, message)# 更新rule的值
if not ok:# 如果点击取消按钮,则退出循环
break
if rule.upper() == 'N':
break
if rule.upper() == 'N':
self.close()
这样修改后,`rule`变量就会在使用前被定义,并且在循环内部不断更新其值。如果点击取消按钮,循环会被打破并结束。
希望这次的解释能够解决你的问题。如果还有其他疑问,请随时提问!谢谢。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-28 10:51
抱歉,我在修改代码时疏忽了。在你的代码中,报错是因为`rule`变量在使用前未定义。这是因为在当前的代 ...
不行,这个rule, ok = dialog.getText(self, title, message)的坐标设定问题还没解决,我改天再来问 凊风 发表于 2024-03-28 11:44
不行,这个rule, ok = dialog.getText(self, title, m ...
非常抱歉,我之前的回答没有解决你的问题。如果你想要设置QInputDialog对话框的位置,可以使用`dialog.move()`方法来实现。下面是一个示例代码:
from PySide6.QtWidgets import QApplication, QMainWindow, QInputDialog
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(100, 100, 300, 200)# 设置主窗口大小和位置
def showDialog(self, x, y, title, message):
dialog = QInputDialog(self)
dialog.setWindowTitle(title)
dialog.setLabelText(message)
dialog.move(x, y)# 设置QInputDialog的位置
rule, ok = dialog.getText()
if ok and rule.upper() == 'N':
self.close()
if __name__ == '__main__':
app = QApplication()
window = MyWindow()
window.show()
window.showDialog(200, 200, '规则录入', '请录入规则。回车持续录入,录N退出:')
app.exec()
在上述代码中,我们为`QInputDialog`设置了标题和提示信息,并使用`move()`方法将其移动到指定位置(此处为(200, 200))。然后,通过调用`getText()`方法获取输入的规则,判断是否退出程序。
希望这次能够解决你的问题。如果还有其他疑问,请随时提问!谢谢。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]