PyQt-Fluent-Widgets 教学
时间: 2025-04-16 12:40:03 浏览: 67
### PyQt-Fluent-Widgets 教程与示例
#### 创建第一个应用程序
为了创建基于 `PyQt-Fluent-Widgets` 的GUI 应用程序,首先需要安装库。可以通过 pip 安装最新版本[^1]。
```bash
pip install pyqt-fluent-widgets
```
接着可以编写简单的 Python 脚本来启动窗口并显示按钮:
```python
from PyQt5.QtWidgets import QApplication, QWidget
import sys
from pyqt_fluent_widgets import PrimaryPushButton # 导入 Fluent 风格组件
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('My First App')
self.setGeometry(100, 100, 280, 80)
button = PrimaryPushButton('Click Me', parent=self)
button.move(90, 30)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
```
这段代码展示了如何导入特定于 `pyqt-fluent-widgets` 的部件来增强界面美观度。
#### 使用高级控件
除了基本的按钮外,此库还提供了更多现代化设计风格的小部件,比如导航栏、卡片视图等。下面是一个更复杂的例子,它实现了带有顶部工具条的应用布局[^2]:
```python
from pyqt_fluent_widgets import (NavigationInterface, NavigationItemPosition,
MessageBox, isDarkTheme, setThemeColor)
from qfluentwidgets import (SettingCardGroup, SwitchSettingCard, HyperlinkCard,
ExpandLayout, SettingCard, PushButton, Theme)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QLabel, QVBoxLayout, QHBoxLayout, QStackedWidget
class MainWindow(QMainWindow):
def __init__(parent=None):
super().__init__(parent=parent)
_layout = QVBoxLayout()
title_label = QLabel("Application Title", objectName='title')
subtitle_label = QLabel("Subtitle description here.", objectName='description')
layout = QHBoxLayout(self.window())
widget_layout = QVBoxLayout()
navigation_interface = NavigationInterface(parent=self.window(), expand_width=True)
stacked_widget = QStackedWidget(objectName='stackedWidget')
home_card_group = SettingCardGroup(title="Home Page")
about_card_group = SettingCardGroup(title="About")
add_navigation_items(navigation_interface=navigation_interface,
card_groups=[home_card_group, about_card_group])
widget_layout.addWidget(title_label)
widget_layout.addWidget(subtitle_label)
widget_layout.addStretch(1)
widget_layout.setSpacing(0)
widget_layout.setAlignment(Qt.AlignTop)
layout.addWidget(stacked_widget)
layout.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
self.setLayout(layout)
self.resize(900, 720)
self.setStyleSheet('''
* {
font-size: 14px;
}
QMainWindow {
background-color: rgb(240, 240, 240);
}
QLabel#title {
color: black;
padding-top: 16px;
margin-bottom: 10px;
font-weight: bold;
text-align: center;
}
QLabel#description {
color: gray;
margin-left: auto;
margin-right: auto;
max-width: 640px;
min-height: 2ex;
text-align: center;
}
''')
def add_navigation_items(navigation_interface, card_groups):
"""Helper function to populate the navigation interface with items."""
for i, group in enumerate(card_groups):
pos = NavigationItemPosition.BOTTOM if i == len(card_groups)-1 else None
for j, card in enumerate(group.cards()):
icon_path = ':/icon.png' if j % 2 == 0 else ''
name = f"{group.title.replace(' ', '_')}_card_{j}"
slot = lambda checked=False, c=card: print(f'Selected {c}')
item = navigation_interface.addItem(
route_key=name.lower(),
icon=QIcon(icon_path),
text=card.text(),
onClick=slot,
position=pos
)
if isinstance(card, SwitchSettingCard):
item.switchButton.setVisible(True)
navigation_interface.setCurrentSelectedRouteKey('home_page_card_0'.lower())
app = QApplication([])
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
上述脚本定义了一个具有响应式菜单系统的主窗口类,并设置了样式表来自定义外观。
阅读全文
相关推荐

















