Почему текст не встаёт в нужную точку?
Решил сделать программу с "кастомным" интерфейсом.
Так как нет стандартной рамки Windows, то название программы я решил вставить через QLabel, но я не понимаю почему текст не встаёт в верхний левый угол.
from PyQt5.QtCore import Qt, QSize, QTimer
from PyQt5.QtWidgets import (QDialog, QVBoxLayout, QWidget,
QGraphicsDropShadowEffect, QPushButton, QGridLayout, QSpacerItem,
QSizePolicy, QLabel, QApplication)
Stylesheet = """
#Custom_Widget {
background: #121212;
}
#closeButton {
min-width: 20px;
min-height: 20px;
font-family: "Webdings";
qproperty-text: "r";
background-color: #0078f2;
color: white;
}
#closeButton:hover {
color: #ccc;
background: red;
}
#logo {
color: white;
}
"""
class Dialog(QDialog):
def __init__(self, *args, **kwargs):
super(Dialog, self).__init__(*args, **kwargs)
self.setObjectName('Custom_Dialog')
self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint)
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.setStyleSheet(Stylesheet)
self.initUi()
def initUi(self):
self.widget = QWidget(self)
self.widget.setObjectName('Custom_Widget')
layout = QVBoxLayout(self)
layout.addWidget(self.widget)
layout = QGridLayout(self.widget)
layout.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum), 0, 0)
layout.addWidget(QPushButton('r', self, clicked=self.accept, objectName='closeButton'), 0, 1)
layout.addWidget(QLabel("<h2>The program</h2>", objectName='logo'), 0, 0)
def sizeHint(self):
return QSize(500, 300)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
w = Dialog()
w.exec_()
QTimer.singleShot(200, app.quit)
sys.exit(app.exec_())
Конкретно проблема в строчке
layout.addWidget(QLabel("<h2>The program</h2>", objectName='logo'), 0, 0)
если в координатах первый будет 0, то и кнопка выхода тоже "съедет" со своего места.
Попутно решил спросить, как сделать чтобы окно можно было двигать мышкой, оно вообще не перемещается.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Как вариант:
from PyQt5.QtCore import Qt, QSize, QTimer, QPoint
from PyQt5.QtWidgets import (QDialog, QVBoxLayout, QWidget,
QGraphicsDropShadowEffect, QPushButton, QGridLayout, QSpacerItem,
QSizePolicy, QLabel, QApplication, QHBoxLayout)
class Dialog(QDialog):
def __init__(self, *args, **kwargs):
super(Dialog, self).__init__(*args, **kwargs)
self.setObjectName('Custom_Dialog')
self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint)
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.start = QPoint(0, 0) # +
self.pressing = False # +
self.initUi()
def initUi(self):
self.widget = QWidget(self)
self.widget.setObjectName('Custom_Widget')
label = QLabel("<h2>The program</h2>", objectName='logo')
pushButton = QPushButton( 'r', clicked=self.accept,
objectName='closeButton', maximumWidth=30)
layout = QHBoxLayout(self.widget)
layout.addWidget(label, alignment=Qt.AlignLeft)
layout.addWidget(pushButton, alignment=Qt.AlignRight)
self.widget_content = QWidget()
self.widget_content.setObjectName('Content_Widget')
label_2 = QLabel("<h1>Hello World.</h1>", objectName='label_2')
layout_2 = QGridLayout(self.widget_content)
layout_2.addWidget(label_2, 0, 0, alignment=Qt.AlignCenter)
main_layout = QVBoxLayout(self)
main_layout.addWidget(self.widget, alignment=Qt.AlignTop)
main_layout.addWidget(self.widget_content, stretch=1)
main_layout.setSpacing(0)
def sizeHint(self):
return QSize(500, 300)
# + vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
def mousePressEvent(self, event):
self.start = self.mapToGlobal(event.pos())
self.pressing = True
def mouseMoveEvent(self, event):
if self.pressing:
self.end = self.mapToGlobal(event.pos())
self.movement = self.end-self.start
self.setGeometry(self.mapToGlobal(self.movement).x(),
self.mapToGlobal(self.movement).y(),
self.width(),
self.height())
self.start = self.end
def mouseReleaseEvent(self, QMouseEvent):
self.pressing = False
# + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Stylesheet = """
#Custom_Widget {
background: #334257;
}
#Content_Widget {
background: #476072;
}
#closeButton {
min-width: 20px;
min-height: 20px;
font-family: "Webdings";
qproperty-text: "r";
background-color: #0078f2;
color: white;
}
#closeButton:hover {
color: #ccc;
background: red;
}
#logo {
color: white;
}
"""
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
app.setStyleSheet(Stylesheet) # +
w = Dialog()
w.exec_()
QTimer.singleShot(200, app.quit)
sys.exit(app.exec_())
