1、在Qt Designer中新建画面,并放置3个按钮(QPushButton)和一个分组框(QGroupBox)小部件,分别命名为btn_1,
btn_2,btn_3和btnStation。
2、将所有小部件的显示文字内容删除。
3、将按钮的宽高尺寸改为50*50,分组框的宽高尺寸改为90*170,并将按钮拖入分组框。如图:
4、使用画图软件绘制图标,这里是使用的32*32,同一图标存为彩色和灰度两种格式。
下面是其中的一个样例:
放大图:
1:1原图:
5、回到Qt Designer,点击“编辑资源”按钮
6、 在弹出窗口中点击“新建资源文件”按钮
新建资源文件,命名为buttons.qrc
点击“添加前缀”按钮,命名为btn_img
点击"添加文件“按钮,选择并添加之前创建的图标文件
至此,按钮图标的资源文件创建完毕。
7、为小部件设置图标样式表 :
其中一个按钮的样式表内容:
QPushButton{image:url(:/btn_img/icon_camera32.png);} /* 常态的样式表*/
QPushButton[activated="true"] { /*激活时的样式表*/
background-color:#9db6f9;
}
QPushButton:disabled{ /*禁用时的样式表*/
image:url(:/btn_img/icon_camera32_gray.png);
}
这里,给按钮自定义了一个特性:activated,当然也可以把activated换成和增加任何你需要的特性。
分组框的样式表内容:
QGroupBox{
border:2px solid #b6b6b6;
background-color:#e0e0e0;
}
设置完成后的显示:
8、使用uic工具和 RCC工具,将ui文件和图像资源转换成python的脚本文件.py。
工具的教程参见:QT designer的安装+PyUIC 和 PyRCC_qt designer安装-CSDN博客
9、创建应用程序的主脚本,导入ui文件和图像资源并应用:
这个应用框架是我根据自己的使用习惯和能力范围创建的,你也可以根据自己的实际情况搭建框架。Pyside使用Qt Designer和uic工具的基本框架的demo-CSDN博客
# encoding: utf-8
import os
import sys# 获取当前脚本的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 将 UIS 文件夹的路径添加到 sys.path 中
uis_dir = os.path.join(current_dir, 'UIS')
sys.path.append(uis_dir)
from UIS import *# 主画面类
class MainWindow(QMainWindow, buttons_demo_ui.Ui_MainWindow):def __init__(self):super().__init__()self.setupUi(self)self.run() # 初始化self.signal_slot() # 信号和槽# 初始化def run(self):self.move(0, 0)self.show() # 显示画面self.btn_station = self.btnStation.children() # 按钮站# 画面层面的信号和槽def signal_slot(self):# 按钮站的槽函数def buttons_clicked(button):def one_btn_clicked():# 设置各个按钮的显示外观def set_styleSheet():for b in self.btn_station:b.setProperty('activated', False)b.setStyleSheet(b.styleSheet())button.setProperty('activated', True)button.setStyleSheet(button.styleSheet())set_styleSheet()# 每个按钮的功能函数if button == mainWindow.btn_1:passelif button == mainWindow.btn_2:passelif button == mainWindow.btn_3:passreturn one_btn_clicked# 按钮站的信号连接for btn in self.btn_station:btn.clicked.connect(buttons_clicked(btn))class Jobs:@staticmethoddef Job_todo_1():pass@staticmethoddef Job_todo_2():pass# 退出系统前的保存、清理、释放等操作@staticmethoddef before_quit():if ui.windows:for w in ui.windows:w.close()# 项目的定义
class UI(QObject): # 将项目定义为QObject,用来管理项目级别的信号和变量def __init__(self):super().__init__()self.run() # 初始化# 项目的初始化def run(self):# 项目层面的信号和槽def signal_slot():pass# 退出系统之前的操作app.aboutToQuit.connect(Jobs.before_quit)signal_slot()# #############################主程序##################################
if __name__ == '__main__':app = QApplication(sys.argv)# 项目的实例化ui = UI()ui.windows = [] # 所有用到的窗口# 初始化画面mainWindow = MainWindow() # 主画面实例化ui.windows.append(mainWindow)sys.exit(app.exec())