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
Forum Updated to NodeBB v4.3 + New Features

QPlainTextEdit set background not working in QGraphicsProxyWidget

Scheduled Pinned Locked Moved Unsolved Qt for Python
1 Posts 1 Posters 411 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