python QLineEdit Text Color

后端 未结 4 520
野性不改
野性不改 2021-01-04 09:17

I am trying to create a demonstration app to show how to change font colors.

I can do it in QLabel and QTextEdit

I have found no way to change the foreground

4条回答
  •  耶瑟儿~
    2021-01-04 09:32

    Below is a code snippet that took me two days of trial and error to figure out. I hope it helps other newbies like myself. My comments in the code should help, too.

    def set_palette(pWidget, pItem):
        # Get the pallet
        myPalette = pWidget.palette()
        defaultHost = led_dem.textEdit
    
        if isinstance(pWidget, QPushButton):
            # NOTE: Using stylesheets will temporarily change the color dialog popups push buttons
            print "Instance Is: %s " %(pWidget.objectName())
            # Existing colors.
            bgColor = pWidget.palette().color(QPalette.Background)
            fgColor = pWidget.palette().color(QPalette.Foreground)
            # Convert the QColors to a string hex for use in the Stylesheet.
            bg = bgColor.name()
            fg = fgColor.name()
    
            if pItem == 'Text':
                # Use the color dialog with a dummy widget to obtain a new QColor for the parameter we are changing.
                color = QColorDialog.getColor(defaultHost.textColor(), pWidget, 'Get Text Color')
                # Convert it to a string HEX
                fg = color.name()
                # Update all parameters of interest
                pWidget.setStyleSheet('background-color: ' + bg + ';color: ' + fg)
    
            if pItem == 'Background':
                color = QColorDialog.getColor(defaultHost.textColor(), pWidget, 'Get Background Color')
                myPalette.setColor(myPalette.Base, QColor(color))
                bg = color.name()
                pWidget.setStyleSheet('background-color: ' + bg + ';color: ' + fg)
    

    This snippet shows:

    • how to find what type of widget you are dealing with;
    • how to covert a QColor from a QColorDialog into a string HEX format for use with a stylesheet; and
    • how to use the QColorDialog when the widget doesn't use a palette element of the type you need.

    In my case I am using defaultHost = led_dem.textEdit where led_dem is my form and textEdit is a textEdit on the form.

    Also, pWidget is the complete widget definition including form and instance.

提交回复
热议问题