Tôi muốn tùy chỉnh thanh tiêu đề và cửa sổ khung sao cho nó trông giống như nokia ovi gui.Cách tùy chỉnh thanh tiêu đề và cửa sổ
Trả lời
#########################################################
## customize Title bar
## dotpy.ir
## [email protected]
#########################################################
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4.QtCore import Qt
class TitleBar(QtGui.QDialog):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setWindowFlags(Qt.FramelessWindowHint);
css = """
QWidget{
Background: #AA00AA;
color:white;
font:12px bold;
font-weight:bold;
border-radius: 1px;
height: 11px;
}
QDialog{
Background-image:url('img/titlebar bg.png');
font-size:12px;
color: black;
}
QToolButton{
Background:#AA00AA;
font-size:11px;
}
QToolButton:hover{
Background: #FF00FF;
font-size:11px;
}
"""
self.setAutoFillBackground(True)
self.setBackgroundRole(QtGui.QPalette.Highlight)
self.setStyleSheet(css)
self.minimize=QtGui.QToolButton(self);
self.minimize.setIcon(QtGui.QIcon('img/min.png'));
self.maximize=QtGui.QToolButton(self);
self.maximize.setIcon(QtGui.QIcon('img/max.png'));
close=QtGui.QToolButton(self);
close.setIcon(QtGui.QIcon('img/close.png'));
self.minimize.setMinimumHeight(10);
close.setMinimumHeight(10);
self.maximize.setMinimumHeight(10);
label=QtGui.QLabel(self);
label.setText("Window Title");
self.setWindowTitle("Window Title");
hbox=QtGui.QHBoxLayout(self);
hbox.addWidget(label);
hbox.addWidget(self.minimize);
hbox.addWidget(self.maximize);
hbox.addWidget(close);
hbox.insertStretch(1,500);
hbox.setSpacing(0);
self.setSizePolicy(QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Fixed);
self.maxNormal=False;
close.clicked.connect(self.close);
self.minimize.clicked.connect(self.showSmall);
self.maximize.clicked.connect(self.showMaxRestore);
def showSmall(self):
box.showMinimized();
def showMaxRestore(self):
if(self.maxNormal):
box.showNormal();
self.maxNormal= False;
self.maximize.setIcon(QtGui.QIcon('img/max.png'));
print '1'
else:
box.showMaximized();
self.maxNormal= True;
print '2'
self.maximize.setIcon(QtGui.QIcon('img/max2.png'));
def close(self):
box.close()
def mousePressEvent(self,event):
if event.button() == Qt.LeftButton:
box.moving = True; box.offset = event.pos()
def mouseMoveEvent(self,event):
if box.moving: box.move(event.globalPos()-box.offset)
class Frame(QtGui.QFrame):
def __init__(self, parent=None):
QtGui.QFrame.__init__(self, parent)
self.m_mouse_down= False;
self.setFrameShape(QtGui.QFrame.StyledPanel)
css = """
QFrame{
Background: #D700D7;
color:white;
font:13px ;
font-weight:bold;
}
"""
self.setStyleSheet(css)
self.setWindowFlags(Qt.FramelessWindowHint);
self.setMouseTracking(True);
self.m_titleBar= TitleBar(self);
self.m_content= QtGui.QWidget(self);
vbox=QtGui.QVBoxLayout(self);
vbox.addWidget(self.m_titleBar);
vbox.setMargin(0);
vbox.setSpacing(0);
layout=QtGui.QVBoxLayout(self);
layout.addWidget(self.m_content);
layout.setMargin(5);
layout.setSpacing(0);
vbox.addLayout(layout);
# Allows you to access the content area of the frame
# where widgets and layouts can be added
def contentWidget(self):
return self.m_content
def titleBar(self):
return self.m_titleBar
def mousePressEvent(self,event):
self.m_old_pos = event.pos();
self.m_mouse_down = event.button()== Qt.LeftButton;
def mouseMoveEvent(self,event):
x=event.x();
y=event.y();
def mouseReleaseEvent(self,event):
m_mouse_down=False;
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv);
box = Frame()
box.move(60,60);
l=QtGui.QVBoxLayout(box.contentWidget());
l.setMargin(0);
edit=QtGui.QLabel("""I would've did anything for you to show you how much I adored you
But it's over now, it's too late to save our loveJust promise me you'll think of me
Every time you look up in the sky and see a star 'cuz I'm your star.""");
l.addWidget(edit)
box.show()
app.exec_()
Aaaah, đó là cách tốt nhất cho lập trình viên để thể hiện cảm xúc của họ về tình yêu đã mất ..;) Cảm ơn @iraj! Giúp tôi rất nhiều (không phải nhà thơ, nhưng thanh tiêu đề tùy chỉnh!). Nó đá! – swdev
@irai jelodari Xin chào, tôi biết chủ đề này khá cũ, nhưng có thể bạn có thể giúp tôi. Tôi sử dụng PySide (trong hầu hết các phần tương thích với PyQt) trên Python 3.4.4. Khi tôi chạy ví dụ, tôi nhận được lỗi này: 'TypeError: PySide.QtGui.QWidget không phải là một lớp cơ sở trực tiếp của TitleBar'. Bất kỳ ý tưởng? – linusg
@linusg Xin chào, tôi đã không làm việc với PyQt từ nhiều năm trước nhưng PyQt và PySide có rất nhiều thay đổi so với phiên bản trước (tôi đã làm việc với phiên bản 4). Bạn sử dụng phiên bản nào? Có thể ai đó có thể giúp bạn. –
Dưới đây là một phiên bản PyQt5 của kịch bản @iraj của jelodari:
#########################################################
## customize Title bar
## dotpy.ir
## [email protected]
#########################################################
import sys
from PyQt5 import QtWidgets, QtGui
from PyQt5 import QtCore
from PyQt5.QtCore import Qt
class TitleBar(QtWidgets.QDialog):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.setWindowFlags(Qt.FramelessWindowHint)
css = """
QWidget{
Background: #AA00AA;
color:white;
font:12px bold;
font-weight:bold;
border-radius: 1px;
height: 11px;
}
QDialog{
Background-image:url('img/titlebar bg.png');
font-size:12px;
color: black;
}
QToolButton{
Background:#AA00AA;
font-size:11px;
}
QToolButton:hover{
Background: #FF00FF;
font-size:11px;
}
"""
self.setAutoFillBackground(True)
self.setBackgroundRole(QtGui.QPalette.Highlight)
self.setStyleSheet(css)
self.minimize=QtWidgets.QToolButton(self)
self.minimize.setIcon(QtGui.QIcon('img/min.png'))
self.maximize=QtWidgets.QToolButton(self)
self.maximize.setIcon(QtGui.QIcon('img/max.png'))
close=QtWidgets.QToolButton(self)
close.setIcon(QtGui.QIcon('img/close.png'))
self.minimize.setMinimumHeight(10)
close.setMinimumHeight(10)
self.maximize.setMinimumHeight(10)
label=QtWidgets.QLabel(self)
label.setText("Window Title")
self.setWindowTitle("Window Title")
hbox=QtWidgets.QHBoxLayout(self)
hbox.addWidget(label)
hbox.addWidget(self.minimize)
hbox.addWidget(self.maximize)
hbox.addWidget(close)
hbox.insertStretch(1,500)
hbox.setSpacing(0)
self.setSizePolicy(QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Fixed)
self.maxNormal=False
close.clicked.connect(self.close)
self.minimize.clicked.connect(self.showSmall)
self.maximize.clicked.connect(self.showMaxRestore)
def showSmall(self):
box.showMinimized()
def showMaxRestore(self):
if(self.maxNormal):
box.showNormal()
self.maxNormal= False
self.maximize.setIcon(QtGui.QIcon('img/max.png'))
print('1')
else:
box.showMaximized()
self.maxNormal= True
print('2')
self.maximize.setIcon(QtGui.QIcon('img/max2.png'))
def close(self):
box.close()
def mousePressEvent(self,event):
if event.button() == Qt.LeftButton:
box.moving = True
box.offset = event.pos()
def mouseMoveEvent(self,event):
if box.moving: box.move(event.globalPos()-box.offset)
class Frame(QtWidgets.QFrame):
def __init__(self, parent=None):
QtWidgets.QFrame.__init__(self, parent)
self.m_mouse_down= False
self.setFrameShape(QtWidgets.QFrame.StyledPanel)
css = """
QFrame{
Background: #D700D7;
color:white;
font:13px ;
font-weight:bold;
}
"""
self.setStyleSheet(css)
self.setWindowFlags(Qt.FramelessWindowHint)
self.setMouseTracking(True)
self.m_titleBar= TitleBar(self)
self.m_content= QtWidgets.QWidget(self)
vbox=QtWidgets.QVBoxLayout(self)
vbox.addWidget(self.m_titleBar)
vbox.setContentsMargins(0, 0, 0, 0)
vbox.setSpacing(0)
layout=QtWidgets.QVBoxLayout()
layout.addWidget(self.m_content)
layout.setContentsMargins(5, 5, 5, 5)
layout.setSpacing(0)
vbox.addLayout(layout)
# Allows you to access the content area of the frame
# where widgets and layouts can be added
def contentWidget(self):
return self.m_content
def titleBar(self):
return self.m_titleBar
def mousePressEvent(self,event):
self.m_old_pos = event.pos()
self.m_mouse_down = event.button()== Qt.LeftButton
def mouseMoveEvent(self,event):
x=event.x()
y=event.y()
def mouseReleaseEvent(self,event):
m_mouse_down=False
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
box = Frame()
box.move(60,60)
l=QtWidgets.QVBoxLayout(box.contentWidget())
l.setContentsMargins(0, 0, 0, 0)
edit=QtWidgets.QLabel("""I would've did anything for you to show you how much I adored you
But it's over now, it's too late to save our loveJust promise me you'll think of me
Every time you look up in the sky and see a star 'cuz I'm your star.""")
l.addWidget(edit)
box.show()
app.exec_()
- 1. WPF: Cửa sổ tùy chỉnh
- 2. Cách tạo cửa sổ có văn bản thanh tác vụ nhưng không có thanh tiêu đề
- 3. Thanh tiêu đề tùy chỉnh với tiến trình trong Android
- 4. Tiêu đề tùy chỉnh tiêu đề FullCalendar
- 5. Đặt thanh tiêu đề tùy chỉnh trong PreferenceAcivity
- 6. Thanh tra tùy chỉnh thống nhất trên Cửa sổ tùy chỉnh
- 7. thoại tùy chỉnh Android hiển thị tiêu đề android thanh
- 8. Thanh tiêu đề tùy chỉnh mà không cần đệm (Android)
- 9. Cách đặt tiêu đề cửa sổ căn giữa (cửa sổ trong wpf)
- 10. Cách tạo tiêu đề email tùy chỉnh
- 11. Tiêu đề chung cho cửa sổ vẽ
- 12. Làm cách nào để thêm nút vào thanh phụ đề WPF khi sử dụng chrome cửa sổ tùy chỉnh?
- 13. Cách ẩn thanh tiêu đề trong cửa sổ chính của iPhone
- 14. Đóng cửa sổ kendoui bằng nút Đóng tùy chỉnh trong cửa sổ
- 15. Cách thêm nút phụ vào thanh tiêu đề của cửa sổ?
- 16. Cách xóa thanh tiêu đề khỏi cửa sổ nhưng giữ đường viền
- 17. Làm thế nào để tùy chỉnh thanh tiêu đề của QMdiSubWindow bằng qss?
- 18. NME Thay đổi tiêu đề cửa sổ trong mục tiêu C++ và Neko
- 19. Ca cao: Cách đặt tiêu đề cửa sổ?
- 20. Ghi đè "Đã chỉnh sửa" trong tiêu đề cửa sổ cho NSDocument
- 21. cách xóa đường viền giữa tiêu đề cửa sổ và nội dung
- 22. cách ghi đè tiêu đề mặc định bằng tiêu đề tùy chỉnh trong android
- 23. Thanh tiêu đề QWidget/QWindow: giao diện tùy chỉnh, cảm giác tự nhiên (tương tự như Chrome)
- 24. r - file.choose() tùy chỉnh cửa sổ hội thoại
- 25. Chủ đề Holo có hoạt động với thanh tiêu đề tùy chỉnh không?
- 26. Đặt văn bản thanh tác vụ khác với tiêu đề Cửa sổ trong wpf
- 27. Các tiêu đề tùy chỉnh PHP cURL
- 28. Cửa sổ thanh tiêu đề dày trong ca cao, tương tự như iTunes
- 29. Tiêu đề tùy chỉnh với hình ảnh
- 30. Thiếu tiêu đề tùy chỉnh với django, nginx và gunicorn
của nó là một điều tốt bạn giải quyết câu hỏi của riêng bạn. Tôi không nghĩ rằng bất cứ ai khác sẽ hiểu những gì bạn đang hỏi. – jdi