2017-10-19 5 views
1

Je suis en train de définir quelques options pour mon QInputDialog. Mais si j'appelle getText ces paramètres n'ont aucun effet.Comment définir les options pour un QInputDialog

Comment puis-je modifier l'apparence de la fenêtre qui apparaît à partir 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_()) 

Répondre

1

Les méthodes get* sont statique, ce qui signifie qu'ils peuvent être appelés sans avoir une instance de la classe QInputDialog. Qt crée une instance de boîte de dialogue interne pour ces méthodes, de sorte que vos paramètres seront ignorés.

Pour obtenir votre exemple au travail, vous devez définir quelques options puis afficher la boîte de dialogue explicitement:

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

Alors maintenant, vous êtes plus ou moins tout ce que Réimplémenter getText fait.

+0

grâce, impressionnant – Jonas