0

I have been using Qt Designer and I have a QFrame called 'DragBar' which im trying to use as a custom Title Bar for my python app with PyQt5, I have been partly successful with making the buttons within 'DragBar' close the app, but I cannot figure out how have it make the window drag around when i click and drag the title bar I created

heres what my project looks like on Qt Designer:

My Object Setup in Qt Designer

Heres my Code so Far:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Tuner.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QCoreApplication

class Ui_MainWindow(object):
    
    def setupUi(self, MainWindow):
        def moveWindow(e):
             if self.isMaximized() == False:
                  if e.buttons() == Qt.LeftButton:
                       self.move(self.pos() + e.globalPos() - self.clickPosition)
        MainWindow.setObjectName("MainWindow")
        MainWindow.setMouseTracking(True)
        MainWindow.setWindowFlag(QtCore.Qt.FramelessWindowHint)
        MainWindow.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        MainWindow.setWindowModality(QtCore.Qt.NonModal)
        MainWindow.setEnabled(True)
        MainWindow.resize(850, 500)
        MainWindow.setMaximumSize(QtCore.QSize(850, 500))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("assets/GmodIcon.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        MainWindow.setWindowIcon(icon)
        MainWindow.setAutoFillBackground(False)
        MainWindow.setStyleSheet("border-radius: 3px;    ")
        MainWindow.setIconSize(QtCore.QSize(28, 28))
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setMaximumSize(QtCore.QSize(850, 500))
        self.centralwidget.setStyleSheet("background-color: rgb(43, 46, 59);")
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.ButtonsBack = QtWidgets.QFrame(self.frame)
        self.ButtonsBack.setGeometry(QtCore.QRect(10, 159, 250, 311))
        self.ButtonsBack.setStyleSheet("background-color: rgb(39, 42, 53);\n"
"border-radius: 3px;")
        self.ButtonsBack.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.ButtonsBack.setFrameShadow(QtWidgets.QFrame.Raised)
        self.ButtonsBack.setObjectName("ButtonsBack")
        self.CheckerButton = QtWidgets.QPushButton(self.ButtonsBack)
        self.CheckerButton.setGeometry(QtCore.QRect(16, 18, 220, 31))
        font = QtGui.QFont()
        font.setFamily("Nunito")
        font.setPointSize(9)
        self.CheckerButton.setFont(font)
        self.CheckerButton.setStyleSheet("QPushButton {        \n"
"    background-color: rgb(53, 56, 69);\n"
"    color: rgb(176, 176, 176);\n"
"}\n"
"QPushButton:hover {        \n"
"    background-color: rgba(64, 184, 255, 25);\n"
"}")
        self.CheckerButton.setObjectName("CheckerButton")
        self.CleanButton = QtWidgets.QPushButton(self.ButtonsBack)
        self.CleanButton.setGeometry(QtCore.QRect(16, 66, 220, 31))
        font = QtGui.QFont()
        font.setFamily("Nunito")
        font.setPointSize(9)
        self.CleanButton.setFont(font)
        self.CleanButton.setStyleSheet("QPushButton {        \n"
"    background-color: rgb(53, 56, 69);\n"
"    color: rgb(176, 176, 176);\n"
"}\n"
"QPushButton:hover {        \n"
"    background-color: rgba(64, 184, 255, 25);\n"
"}")
        self.CleanButton.setObjectName("CleanButton")
        self.SaveAdvDupeButton = QtWidgets.QPushButton(self.ButtonsBack)
        self.SaveAdvDupeButton.setGeometry(QtCore.QRect(16, 114, 220, 31))
        font = QtGui.QFont()
        font.setFamily("Nunito")
        font.setPointSize(9)
        self.SaveAdvDupeButton.setFont(font)
        self.SaveAdvDupeButton.setStyleSheet("QPushButton {        \n"
"    background-color: rgb(53, 56, 69);\n"
"    color: rgb(176, 176, 176);\n"
"}\n"
"QPushButton:hover {        \n"
"    background-color: rgba(64, 184, 255, 25);\n"
"}")
        self.SaveAdvDupeButton.setObjectName("SaveAdvDupeButton")
        self.ConsoleBack = QtWidgets.QFrame(self.frame)
        self.ConsoleBack.setGeometry(QtCore.QRect(270, 159, 561, 311))
        self.ConsoleBack.setStyleSheet("background-color: rgb(39, 42, 53);\n"
"border-radius: 3px;")
        self.ConsoleBack.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.ConsoleBack.setFrameShadow(QtWidgets.QFrame.Raised)
        self.ConsoleBack.setObjectName("ConsoleBack")
        self.ConsoleText = QtWidgets.QPlainTextEdit(self.ConsoleBack)
        self.ConsoleText.setGeometry(QtCore.QRect(8, 3, 511, 291))
        font = QtGui.QFont()
        font.setFamily("Nunito Light")
        font.setPointSize(10)
        font.setItalic(False)
        self.ConsoleText.setFont(font)
        self.ConsoleText.setStyleSheet("color: rgb(255, 255, 255);")
        self.ConsoleText.setObjectName("ConsoleText")
        self.CenterLine = QtWidgets.QFrame(self.frame)
        self.CenterLine.setEnabled(True)
        self.CenterLine.setGeometry(QtCore.QRect(425, 0, 1, 0))
        self.CenterLine.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.CenterLine.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.CenterLine.setFrameShadow(QtWidgets.QFrame.Raised)
        self.CenterLine.setObjectName("CenterLine")
        self.DragBar = QtWidgets.QFrame(self.frame)
        self.DragBar.mouseMoveEvent = moveWindow
        self.DragBar.setGeometry(QtCore.QRect(0, 0, 831, 31))
        self.DragBar.setStyleSheet("background-color: rgb(53, 56, 69);\n"
"border-radius: 4px;    ")
        self.DragBar.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.DragBar.setFrameShadow(QtWidgets.QFrame.Raised)
        self.DragBar.setObjectName("DragBar")
        self.Title = QtWidgets.QLabel(self.DragBar)
        self.Title.setGeometry(QtCore.QRect(10, 0, 811, 31))
        font = QtGui.QFont()
        font.setFamily("Nunito Light")
        font.setPointSize(12)
        self.Title.setFont(font)
        self.Title.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.Title.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
        self.Title.setObjectName("Title")
        self.ExitButton = QtWidgets.QPushButton(self.DragBar)
        self.ExitButton.clicked.connect(QCoreApplication.quit)
        self.ExitButton.setGeometry(QtCore.QRect(800, 5, 21, 21))
        self.ExitButton.setStyleSheet("")
        self.ExitButton.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("assets/Exit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.ExitButton.setIcon(icon1)
        self.ExitButton.setObjectName("ExitButton")
        self.ChecksBack = QtWidgets.QFrame(self.frame)
        self.ChecksBack.setGeometry(QtCore.QRect(270, 110, 541, 41))
        self.ChecksBack.setStyleSheet("background-color: rgb(39, 42, 53);\n"
"border-radius: 3px;")
        self.ChecksBack.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.ChecksBack.setFrameShadow(QtWidgets.QFrame.Raised)
        self.ChecksBack.setObjectName("ChecksBack")
        self.horizontalLayoutWidget = QtWidgets.QWidget(self.ChecksBack)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 541, 41))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.GameCheckLabelLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.GameCheckLabelLayout.setContentsMargins(0, 0, 0, 0)
        self.GameCheckLabelLayout.setObjectName("GameCheckLabelLayout")
        self.label_6 = QtWidgets.QLabel(self.horizontalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Nunito Light")
        font.setPointSize(14)
        self.label_6.setFont(font)
        self.label_6.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label_6.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_6.setObjectName("label_6")
        self.GameCheckLabelLayout.addWidget(self.label_6)
        self.label_7 = QtWidgets.QLabel(self.horizontalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Nunito Light")
        font.setPointSize(14)
        self.label_7.setFont(font)
        self.label_7.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label_7.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
        self.label_7.setObjectName("label_7")
        self.GameCheckLabelLayout.addWidget(self.label_7)
        self.label_4 = QtWidgets.QLabel(self.horizontalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Nunito Light")
        font.setPointSize(14)
        self.label_4.setFont(font)
        self.label_4.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label_4.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_4.setObjectName("label_4")
        self.GameCheckLabelLayout.addWidget(self.label_4)
        self.label_5 = QtWidgets.QLabel(self.horizontalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Nunito Light")
        font.setPointSize(14)
        self.label_5.setFont(font)
        self.label_5.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label_5.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
        self.label_5.setObjectName("label_5")
        self.GameCheckLabelLayout.addWidget(self.label_5)
        self.GmodLogo = QtWidgets.QLabel(self.frame)
        self.GmodLogo.setGeometry(QtCore.QRect(90, 46, 90, 90))
        self.GmodLogo.setText("")
        self.GmodLogo.setPixmap(QtGui.QPixmap("assets/GmodCircle.png"))
        self.GmodLogo.setScaledContents(True)
        self.GmodLogo.setObjectName("GmodLogo")
        self.ProgressBack = QtWidgets.QFrame(self.frame)
        self.ProgressBack.setGeometry(QtCore.QRect(440, 40, 371, 51))
        self.ProgressBack.setStyleSheet("background-color: rgb(39, 42, 53);\n"
"border-radius: 3px;")
        self.ProgressBack.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.ProgressBack.setFrameShadow(QtWidgets.QFrame.Raised)
        self.ProgressBack.setObjectName("ProgressBack")
        self.progressBar = QtWidgets.QProgressBar(self.ProgressBack)
        self.progressBar.setGeometry(QtCore.QRect(10, 10, 351, 31))
        self.progressBar.setStyleSheet("QProgressBar {\n"
"    color: rgb(0, 130, 255);\n"
"    border-radius: 3px;\n"
"    background-color: rgb(35, 37, 50);\n"
"}\n"
"\n"
"QProgressBar::chunk {\n"
"    background-color: #0082ff;\n"
"    border-radius: 3px;\n"
"}\n"
"")
        self.progressBar.setProperty("value", 67)
        self.progressBar.setTextVisible(False)
        self.progressBar.setObjectName("progressBar")
        self.horizontalLayout.addWidget(self.frame)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        def mousePressEvent(self, event):
                #GET CURRENT MOUSEPOS
                self.clickPosition = event.globalPos()
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Garry\'s Mod Tuner"))
        self.CheckerButton.setText(_translate("MainWindow", "Proxy Checker"))
        self.CleanButton.setText(_translate("MainWindow", "Clean Game"))
        self.SaveAdvDupeButton.setText(_translate("MainWindow", "Save Advanced Dupes"))
        self.ConsoleText.setPlainText(_translate("MainWindow", "// Console Output Text"))
        self.Title.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" color:#c8c8c8;\">Garry\'s Mod Tuner v1.0</span></p></body></html>"))
        self.label_6.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" color:#b4b4b4;\">Garry\'s Mod</span></p></body></html>"))
        self.label_7.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" color:#23ba30;\">Found</span></p></body></html>"))
        self.label_4.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" color:#b4b4b4;\">Adv Dupe</span></p></body></html>"))
        self.label_5.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" color:#ba1f1f;\">Not Found</span></p></body></html>"))


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_())

How can I alter the code to make it be able to be dragged around like the default title bar?

I've referenced This Articile but I couldn't figure out how to implement it into my code.

I've made the DragBar partly functional as a title bar within the python file by doing the following:

  • Using self.setWindowFlag(QtCore.Qt.FramelessWindowHint) to disable the default windows title bar (self is replaced with MainWindow in my code)

  • Making the X button in the top right close the app by using self.ExitButton.clicked.connect(QCoreApplication.quit)

  • I watched a youtube tutorial and tried to make a function moveWindow and use mouseMoveEvent on 'DragBar' to call the function, but it does nothing when I click and drag 'DragBar'

  • With all due respect, what part of "Do not edit this file unless you know what you are doing." are you missing? Please follow the official guidelines about [using Designer](//www.riverbankcomputing.com/static/Docs/PyQt5/designer.html), then implement what explained in the answers of the post you linked in the resulting code. – musicamante Jul 09 '23 at 02:39

0 Answers0