1

I have been trying to figure this out for the last two days. I want to make my window frameless, I saw in a couple of resources that I should be using Qt.FramelessWindowHint . However, it doesn't want to work and I can't figure out why.

Can someone please point out what's wrong with my code, as I am very new to PyQt5? (I have commented out sections that are related to some other files)

from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtCore import QTimer, Qt

#from HomeWindow import Ui_Form 
    
class Ui_MainWindow(QtWidgets.QMainWindow):
    
    def __init__(self):
        super().__init__()
        
    
    #def secondscreen(self):
        #self.Form = QtWidgets.QWidget()
        #self.ui = Ui_Form()
        #self.ui.setupUi(self.Form)
        #self.Form.showMaximized() 
        
        
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(560, 350)
        MainWindow.setStyleSheet("background-color: rgb(255, 255, 255);")
        
        flags = Qt.WindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
        self.setWindowFlags(flags)
        
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
        self.textBrowser.setGeometry(QtCore.QRect(80, 280, 470, 60))
        self.textBrowser.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.textBrowser.setFrameShadow(QtWidgets.QFrame.Plain)
        self.textBrowser.setObjectName("textBrowser")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 270, 61, 71))
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("../Media/College Logo.png"))
        self.label.setScaledContents(True)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(290, 60, 220, 80))
        font = QtGui.QFont()
        font.setPointSize(28)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(290, 140, 81, 16))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(0, 20, 231, 211))
        self.label_4.setText("")
        self.label_4.setPixmap(QtGui.QPixmap("../Media/Smample Logo.png"))
        self.label_4.setScaledContents(True)
        self.label_4.setAlignment(QtCore.Qt.AlignCenter)
        self.label_4.setObjectName("label_4")
      
        
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(290, 190, 93, 28))
        self.pushButton.setObjectName("pushButton")
        #self.pushButton.clicked.connect(self.secondscreen)
        #self.pushButton.clicked.connect(MainWindow.close)
        
       
       
        #QTimer.singleShot (5000, self.secondscreen)
        #QTimer.singleShot (5001, MainWindow.close)
        
        
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.textBrowser.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
    "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
    "p, li { white-space: pre-wrap; }\n"
    "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:7.8pt; font-weight:400; font-style:normal;\">\n"
    "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'MS Shell Dlg 2\';\">(c) 2020 SQU, Inc. Protected by international patents. See Squ.om/patents. App name is a registered trademark of SQU, Inc. Other product or brand names may be trademarks or registred trademarks of their respective holder.</span></p></body></html>"))
        self.label_2.setText(_translate("MainWindow", "Mechanica"))
        self.label_3.setText(_translate("MainWindow", "Version 1.0"))
        self.pushButton.setText(_translate("MainWindow", "Start"))
        
              
    
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
Ahmed Zeid
  • 31
  • 5

1 Answers1

0

You shouldn't try to edit or mimic the behavior of files generated by pyuic, as doing it leads to confusion about the object structure, and that's exactly your case.

Your Ui_MainWindow already inherits from QMainWindow, there's no use to create an instance of QMainWindow. In fact, what you're seeing is that QMainWindow, while you're setting the flag on the Ui_MainWindow instance, which you're never actually showing.

class Ui_MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

    # ...

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    mainWindow =  Ui_MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())
musicamante
  • 41,230
  • 6
  • 33
  • 58
  • Great! That solved my problem right away. Also, do you happen to know if FramelessWindowHint is getting replaced or something? Because I keep on getting deprecation warnings every time I run it. DeprecationWarning: an integer is required (got type WindowFlags). Implicit conversion to integers using __int__ is deprecated, and may be removed in a future version of Python. flags = Qt.WindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) – Ahmed Zeid Nov 08 '20 at 11:16
  • @AhmedZeid There's no need to construct a WindowFlag, just use `self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)`. – musicamante Nov 08 '20 at 15:53