1

我正在尝试为我的QInputDialog. 但是如果我调用getText这些设置没有任何效果。

如何更改弹出窗口的外观getText

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_())
4

1 回答 1

3

get*方法都是静态的,这意味着可以在没有QInputDialog类实例的情况下调用它们。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

于 2017-10-19T13:42:19.400 回答