Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. QPlainTextEdit set background not working in QGraphicsProxyWidget

QPlainTextEdit set background not working in QGraphicsProxyWidget

Scheduled Pinned Locked Moved Unsolved Qt for Python
1 Posts 1 Posters 482 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • NiagarerN Offline
    NiagarerN Offline
    Niagarer
    wrote on last edited by Niagarer
    #1

    Hi,
    I'm sorry, I know these 'fix my code' questions are often quite useless, but I am really stuck, my apologies.
    I am trying to set the background-color of a QPlainTextEdit via stylesheet and it doesn't work. Setting the color does work though. The widget gets placed with a QGraphicsProxyWidget in a QGraphicsScene. But from what I know, this shouldn't affect the visual appearance of the widget.

    class Code_NodeInstance_MainWidget(QWidget):
        def __init__(self, parent_node_instance):
            super(Code_NodeInstance_MainWidget, self).__init__()
    
            self.code_text_edits = []
    
            self.code_font = QFont('Courier New', 12)
    
            # UI
            self.setLayout(QVBoxLayout())
    
            self.add_new_script()
    
    
        def add_new_script(self):
            code_text_edit = QPlainTextEdit()
            code_text_edit.setPlainText('test code')
            code_text_edit.setFont(self.code_font)
            code_text_edit.setStyleSheet('background: black; color: grey;')
            self.code_text_edits.append(code_text_edit)
            self.layout().addWidget(code_text_edit)
    

    it just does not set the background, I also tried using

    self.setStyleSheet('''
    QPlainTextEdit {
        background-color: black;
        color: grey;
    }
    ''')
    

    in the constructor, also didn't work.
    I am probably stupidly missing something pretty obvious.
    Thanks for answers!

    edit
    I am very confused. The following two prints:

            print('before: ', self.height())
            self.layout().addWidget(code_text_edit)
            print('after: ', self.height())
    

    print exactly the same also when I can see that the widget expands vertically and I think that shouldn't be.
    You can test this, MRO:

    from PySide2.QtWidgets import QMainWindow, QApplication, QWidget, QVBoxLayout, QPlainTextEdit, QGraphicsView, QGraphicsScene, QGraphicsProxyWidget
    
    class CodeWidget(QWidget):
        def __init__(self):
            super(CodeWidget, self).__init__()
    
            # UI
            self.setLayout(QVBoxLayout())
    
            self.add_new_script()
    
        def add_new_script(self):
            code_text_edit = QPlainTextEdit('test code')
            code_text_edit.setStyleSheet('background: black; color: grey;')
            print('before: ', self.height())
            self.layout().addWidget(code_text_edit)
            print('after: ', self.height())
    
        def mousePressEvent(self, event):
            print('mouse pressed! adding new script')
            self.add_new_script()
    
    
    class MyView(QGraphicsView):
        def __init__(self):
            super(MyView, self).__init__()
    
    
            # create UI
            scene = QGraphicsScene(self)
            scene.setSceneRect(0, 0, 500, 500)
    
            self.setScene(scene)
    
            self.code_proxy = QGraphicsProxyWidget()
            self.code_widget = CodeWidget()
            self.code_proxy.setWidget(self.code_widget)
    
            scene.addItem(self.code_proxy)
            self.code_proxy.setPos(50, 50)
    
    
    class MainWindow(QMainWindow):
        def __init__(self):
            super(MainWindow, self).__init__()
    
            w = MyView()
    
            self.setCentralWidget(w)
    
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
    
        mw = MainWindow()
        mw.show()
    
        sys.exit(app.exec_())
    

    just click on the little space between text edit border and CodeWidget border. I don't know if these things are related but maybe my widget is fundamentally wrong configured.

    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved