有什么方法可以创建一个带有组合框的输入对话框,该组合框在单击确定按钮后不会关闭。我尝试使用
QInputDialog.setOption(QInputDialog[NoButtons, on=True])
那没有用。我尝试使用第二个窗口,但无法正确配置。
另外,有什么方法可以将 OK 按钮信号用于其他地方的逻辑吗?
有什么方法可以创建一个带有组合框的输入对话框,该组合框在单击确定按钮后不会关闭。我尝试使用
QInputDialog.setOption(QInputDialog[NoButtons, on=True])
那没有用。我尝试使用第二个窗口,但无法正确配置。
另外,有什么方法可以将 OK 按钮信号用于其他地方的逻辑吗?
如果你想打开一个带有选项的 QInputDialog QInputDialog.NoButtons
,你可以这样做:
dg = QInputDialog()
dg.setOption(QInputDialog.NoButtons)
dg.setComboBoxItems(['Item A', 'Item B', 'Item C'])
dg.exec_()
QInputDialog 类的目的是提供一种非常简单方便的方式来获取用户输入,而无需太多自定义空间。OK 按钮信号始终连接到对话框的accept
插槽。如果您想更改各种信号和插槽的设置,我建议将 QDialog 子类化并构建自己的。这是一个简单的例子,当按下 OK 时窗口不会关闭,而是将当前项目打印到 shell。
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class CustomDialog(QDialog):
item_selected = pyqtSignal(str)
def __init__(self, items, *args, **kwargs):
super().__init__(*args, **kwargs)
self.box = QComboBox()
self.box.addItems(items)
btn = QPushButton('Ok')
btn.clicked.connect(self.ok_pressed)
vbox = QVBoxLayout(self)
vbox.addWidget(self.box)
vbox.addWidget(btn)
def ok_pressed(self):
self.item_selected.emit(self.box.currentText())
class Template(QWidget):
def __init__(self):
super().__init__()
dg = CustomDialog(['Item A', 'Item B', 'Item C'], self)
dg.item_selected[str].connect(self.do_something)
dg.exec_()
def do_something(self, item):
print(item)
if __name__ == '__main__':
app = QApplication(sys.argv)
gui = Template()
gui.show()
sys.exit(app.exec_())