-2

everyone. I want to float a widget inside a layout of a main-window. the widget is disappered from layout but not displayed on screen As you can see from following code. I floated two labels 'lbl_title' and 'lbl_icon' they seems to be floated but not displayed on screen. Here comes my code. If you loose commented line, then the lbl_icon and title is removed from layout but not are shown on my screen

    from PyQt5.QtCore import QDir, Qt, QUrl
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtWidgets import (QApplication, QFileDialog, QHBoxLayout, QLabel,
        QPushButton, QSizePolicy, QSlider, QStyle, QVBoxLayout, QWidget)
from PyQt5.QtWidgets import QMainWindow,QWidget, QPushButton, QAction,QGridLayout
from PyQt5.QtGui import QIcon,QPixmap
import sys
from PyQt5.QtCore import *

class CommonLessonItem(QWidget):

    def __init__(self,parent):

        super(CommonLessonItem,self).__init__(parent)
        
        self.lbl_title = QLabel(self)
        self.lbl_description = QLabel(self)
        self.lbl_icon = QLabel(self)
        self.__initUI()
        self.isChild = False

    def __initUI(self):
        
        #set layout
        self.layout = QGridLayout(self)
        self.layout.addWidget(self.lbl_title,0,0,1,19)
        self.layout.addWidget(self.lbl_icon,0,19,1,1)
        self.layout.addWidget(self.lbl_description,1,0,1,20)
        self.lbl_icon.setWindowFlags(Qt.FramelessWindowHint|Qt.Window)
        self.lbl_icon.move(100,100)
        self.lbl_title.setWindowFlags(Qt.FramelessWindowHint|Qt.Window)
        self.lbl_title.move(100,100)
        
        #initialize info
        self.setInfo("Title","Description",None)
        self.setLayout(self.layout)


    def setInfo(self,title,description,iconPath):
        self.lbl_title.setText(title)
        self.lbl_description.setText(description)
        if(iconPath is not None):
            self.lbl_icon.setPixmap(QPixmap(iconPath))
    def moveEvent(self,event):
        super().moveEvent(event)
        


if __name__ == "__main__":
    app = QApplication(sys.argv)
    mw = CommonLessonItem(None)
    # mw.setSize(10,200)
    mw.show()
    sys.exit(app.exec_())

I need your help.

dauren slambekov
  • 378
  • 3
  • 15

1 Answers1

1

Whenever a widget becomes a top level window by setting the parent to None or, like in your case, setting the Window flag (but I wouldn't suggest that approach) show() must be called.

As explained in windowFlags:

Note: This function calls setParent() when changing the flags for a window, causing the widget to be hidden. You must call show() to make the widget visible again..

Add self.lbl_icon.show() and self.lbl_title.show() after changing their window state.

musicamante
  • 41,230
  • 6
  • 33
  • 58