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 usemouseMoveEvent
on 'DragBar' to call the function, but it does nothing when I click and drag 'DragBar'