📌 CodeGenor,一款快速生成Python(PySide/PyQt)、C++ UI界面的超强利器。CodeGenor之家网站:http://106.12.173.80/早期的CodeGenor存在信号槽系统属于简易的、基本的信号槽系统,通过在界面上选中控件进行右键绑定信号和槽。最近在和同类产品对比的过程中为了保持老用户的使用在传统信号槽编辑器习惯,以及处理传统信号编辑器的痛点问题,特意开发了CodeGenor信号槽编辑器初版。CodeGenor的信号槽编辑器在传统信号编辑器的基础上做了一定的增强功能。传统信号槽编辑器仅能在当前界面上进行信号槽绑定。如下图介绍:信号的发送者和接收者只能是统一文档内的控件变量,这在一定程度上具有局限性。而CodeGenor在变量系统时引入了项目界面变量的概念,即在一个项目中存在多个界面类,在当前界面类中可以创建非当前界面类的指针变量,这就为不同界面类之间的信号槽绑定打下了坚实的基础。默认支持本界面内控件变量的信号槽绑定,如果需要绑定项目内其他界面类的信号槽,则首先需要在当前界面类中创建其他界面类型的成员变量,如下:在MainPage.gui中可以创建ScoreDetail*和LoginDlg*类型的界面成员变量。我们起名叫做m_scoredlg与m_logdlg。接下来在信号槽编辑器中我们对学生成绩按钮的click信号绑定m_scoredlg的exec槽函数。在dist/src目录下可以看见完整的项目代码。通过python执行界面项目。
# Source code : # -*- coding: utf-8 -*-import sysfrom PySide6.QtWidgets import *from PySide6.QtCore import *from PySide6.QtGui import *from .scoredetaildlg import ScoreDetailDlgfrom .logindlg import LoginDlgclass MainPage(QMainWindow): def __init__(self, parent=None): super().__init__(parent) # init layout self.m_qvboxlayout_0 = None # init controls self.m_btn_login = None self.m_qcombobox_0 = None self.m_qlineedit_1 = None self.m_qpushbutton_0 = None # 用户变量 self.m_logdlg = LoginDlg() self.m_scoredlg = ScoreDetailDlg() self.m_count = None sigTest = Signal(int, str) self.initUI() self.initSlots() def initUI(self): # windows size setting self.resize(800, 600) self.setWindowFlags(self.windowFlags() & ~Qt.WindowType.WindowContextHelpButtonHint) # layout setting self.m_qvboxlayout_0 = QVBoxLayout() self.m_qpushbutton_0 = QPushButton() self.m_qpushbutton_0.setText("最大化") self.m_qvboxlayout_0.addWidget(self.m_qpushbutton_0) self.m_btn_login = QPushButton() self.m_btn_login.setText("显示Login") self.m_qvboxlayout_0.addWidget(self.m_btn_login) self.m_qpushbutton_0 = QPushButton() self.m_qpushbutton_0.setText("学生成绩") self.m_qvboxlayout_0.addWidget(self.m_qpushbutton_0) self.m_qcombobox_0 = QComboBox() self.m_qcombobox_0.addItem("Item 1") self.m_qvboxlayout_0.addWidget(self.m_qcombobox_0) self.m_qlineedit_1 = QLineEdit() self.m_qlineedit_1.setText("LineEdit") self.m_qvboxlayout_0.addWidget(self.m_qlineedit_1) self.central_widget = QWidget(self) self.setCentralWidget(self.central_widget) self.central_widget.setLayout(self.m_qvboxlayout_0) def initSlots(self): # connect signal slot self.m_qpushbutton_0.clicked.connect(lambda : self.showMaximized()) self.m_btn_login.clicked.connect(lambda : self.m_logdlg.exec()) self.m_qcombobox_0.currentIndexChanged.connect(self.onIndexChanged) self.m_qpushbutton_0.clicked.connect(lambda : self.m_scoredlg.exec()) def onIndexChanged(self, param1): # TODO: Implement slot logic pass
scoredetaildlg.py
# Source code : # -*- coding: utf-8 -*-import sysfrom PySide6.QtWidgets import *from PySide6.QtCore import *from PySide6.QtGui import *class ScoreDetailDlg(QDialog): def __init__(self, parent=None): super().__init__(parent) # init layout self.m_qvboxlayout_0 = None # init controls self.m_qlabel_0 = None self.m_qtabwidget_1 = None self.m_qtabwidget_1_widget0 = None self.m_qtabwidget_1_widget1 = None # 用户变量 self.initUI() self.initSlots() def initUI(self): # windows size setting self.resize(800, 600) self.setWindowFlags(self.windowFlags() & ~Qt.WindowType.WindowContextHelpButtonHint) # layout setting self.m_qvboxlayout_0 = QVBoxLayout(self) self.m_qlabel_0 = QLabel() self.m_qlabel_0.setText("学生成绩:") self.m_qvboxlayout_0.addWidget(self.m_qlabel_0) self.m_qtabwidget_1 = QTabWidget() self.m_qtabwidget_1.setTabsClosable(False) self.m_qtabwidget_1.setMovable(False) self.m_qtabwidget_1_widget0 = QWidget() self.m_qtabwidget_1.addTab(self.m_qtabwidget_1_widget0, 'Tab0') self.m_qtabwidget_1_widget1 = QWidget() self.m_qtabwidget_1.addTab(self.m_qtabwidget_1_widget1, 'Tab1') self.m_qvboxlayout_0.addWidget(self.m_qtabwidget_1) self.setLayout(self.m_qvboxlayout_0) def initSlots(self): # connect signal slot pass
logindlg.py
# Source code : # -*- coding: utf-8 -*-import sysfrom PySide6.QtWidgets import *from PySide6.QtCore import *from PySide6.QtGui import *class LoginDlg(QDialog): def __init__(self, parent=None): super().__init__(parent) # init layout self.m_qhboxlayout_1 = None self.m_qvboxlayout_0 = None # init controls self.m_qpushbutton_1 = None self.m_qtextedit_0 = None # 用户变量 sigTestLogin = Signal(int, str) self.initUI() self.initSlots() def initUI(self): # windows size setting self.resize(800, 600) self.setWindowFlags(self.windowFlags() & ~Qt.WindowType.WindowContextHelpButtonHint) # layout setting self.m_qvboxlayout_0 = QVBoxLayout(self) self.m_qtextedit_0 = QTextEdit() self.m_qtextedit_0.setText("m_qtextedit_0") self.m_qvboxlayout_0.addWidget(self.m_qtextedit_0) self.m_qhboxlayout_1 = QHBoxLayout() self.m_qhboxlayout_1.addStretch(1) self.m_qpushbutton_1 = QPushButton() self.m_qpushbutton_1.setText("Button") self.m_qhboxlayout_1.addWidget(self.m_qpushbutton_1) self.m_qvboxlayout_0.addLayout(self.m_qhboxlayout_1) self.setLayout(self.m_qvboxlayout_0) def initSlots(self): # connect signal slot pass
运行效果:
以上,我们可以看到CodeGenor的信号槽编辑器能够灵活的在项目内进行界面直接以及界面内的信号槽绑定,基于多GUI文件的的界面工程提升了UI设计器的实用性。掌握一款工具我们需要掌握他的快捷键,这样往往能效率倍增,接下来我们回味下CodGneor的快捷键。📌 CodeGenor自动 UI 类生成系统是一款功能强大、使用便捷的同时支持C++与Python(PySide/PyQt)的Qt UI 界面开发工具,一站式设计、项目生成、编译打包。它通过可视化设计和代码自动生成的方式,其中设计时期增加信号槽函数并绑定、自定义属性设置等功能大大简化了 UI 开发的流程,提高了开发效率。无论是专业开发者还是初学者,都能从这款工具中受益。如果你正在寻找一款高效的 UI 开发工具,不妨尝试一下这款自动 UI 类生成系统。欢迎关注本人进行获取交流以及提供宝贵的意见。