如何为 QInputDialog 设置选项

How set options for a QInputDialog

我正在尝试为我的 QInputDialog 设置一些选项。但是如果我调用 getText 这些设置没有效果。

如何更改从 getText 弹出的 window 的外观?

import sys
from PyQt5 import QtWidgets, QtCore


class Mywidget(QtWidgets.QWidget):
    def __init__(self):
        super(Mywidget, self).__init__()
        self.setFixedSize(800, 600)

    def mousePressEvent(self, event):
        self.opendialog()

    def opendialog(self):
        inp = QtWidgets.QInputDialog()

        ##### SOME SETTINGS
        inp.setInputMode(QtWidgets.QInputDialog.TextInput)
        inp.setFixedSize(400, 200)
        inp.setOption(QtWidgets.QInputDialog.UsePlainTextEditForTextInput)
        p = inp.palette()
        p.setColor(inp.backgroundRole(), QtCore.Qt.red)
        inp.setPalette(p)
        #####

        text, ok = inp.getText(w, 'title', 'description')
        if ok:
            print(text)
        else:
            print('cancel')

if __name__ == '__main__':
    qApp = QtWidgets.QApplication(sys.argv)
    w = Mywidget()
    w.show()
    sys.exit(qApp.exec_())

get*方法都是static,这意味着它们可以在没有QInputDialogclass实例的情况下被调用。 Qt 为这些方法创建了一个内部 对话框实例,因此您的设置将被忽略。

要让您的示例运行,您需要设置更多选项,然后显式显示对话框:

def opendialog(self):
    inp = QtWidgets.QInputDialog(self)

    ##### SOME SETTINGS
    inp.setInputMode(QtWidgets.QInputDialog.TextInput)
    inp.setFixedSize(400, 200)
    inp.setOption(QtWidgets.QInputDialog.UsePlainTextEditForTextInput)
    p = inp.palette()
    p.setColor(inp.backgroundRole(), QtCore.Qt.red)
    inp.setPalette(p)

    inp.setWindowTitle('title')
    inp.setLabelText('description')
    #####

    if inp.exec_() == QtWidgets.QDialog.Accepted:
        print(inp.textValue())
    else:
        print('cancel')

    inp.deleteLater()

所以现在您或多或少地重新实现了 getText 所做的一切。