96SEO 2026-02-20 00:42 16
对程序员来说差别很小它们的调用接口几乎一模一样。

如果你的程序是PyQt5开发的通常只要略作修改比如把导入的名字从
https://pypi.douban.com/simple/
pyqt6-tools问题运行pyside2代码时发生初始化问题
os.path.dirname(PySide2.__file__)
os.environ[QT_QPA_PLATFORM_PLUGIN_PATH]
D:\Anaconda\envs\virtual_pytorch\Library\plugins\platforms1
提供了整个图形界面程序的底层管理功能比如初始化、程序入口参数的处理用户事件对界面的点击、输入、拖拽分发给各个对应的控件等等。
所以我们必须在任何界面控件对象创建前先创建它。
QApplication([])QMainWindow、QPlainTextEdit、QPushButton
是3个控件类分别对应界面的主窗口、文本框、按钮。
他们都是控件基类对象QWidget的子类。
要在界面上
window.setWindowTitle(窗口名)textEdit
textEdit.setPlaceholderText(文本框名)
button.move(380,80)window.show()
进入QApplication的事件处理循环接收用户的输入事件在
的除了最顶层的控件其他的控件都有父控件。
QPlainTextEdit、QPushButton
通过app.exec_()进入QApplication的事件处理循环接收用户的输入事件并且分配给相应的对象去处理。
常用控件介绍https://www.byhy.net/tut/py/gui/qt_05_1/
handleCalc():QMessageBox.about(window,
点击按钮1次)QMessageBox是的信息提示框对象他的about方法可以单独弹出一个提示框。
button.clicked.connect(handleCalc)用QT的术语来解释上面这行代码就是把
所以我们通常应该把窗口和其包含的控件(self)以及处理函数对应的代码
os.path.dirname(PySide2.__file__)
os.environ[QT_QPA_PLATFORM_PLUGIN_PATH]
QMainWindow()self.window.resize(500,
300)self.window.setWindowTitle(窗口名)self.textEdit
QPlainTextEdit(self.window)self.textEdit.setPlaceholderText(文本框默认内容)self.textEdit.move(10,
self.window)self.button.move(380,
80)self.button.clicked.connect(self.handleCalc)def
handleCalc(self):QMessageBox.about(self.window,
区域提供GUI界面开发使用的各种基本控件如单选框、文本框等。
可以拖动到新创建的主程序界面。
区域用户放置各种从工具箱拖过来的各种控件。
模板选项中最常用的就是Widget通用窗口和MainWindow主窗口。
二者区别主要是Widget窗口不包含菜单栏、工具栏等。
可以分别创建对比看看。
提供对窗口、控件、布局的属性编辑功能。
比如修改控件的显示文本、对象名、大小等。
Window(包含菜单栏的窗体)Widget(不包含菜单栏的窗体)显示控件(Display
中QLabel类可以显示文字和图片选择了QLabel加Timer播放。
QLabel显示的格式必须是Qimage,但是用cv2读取的帧格式是numpy
Browser显示文本控件。
用于后台命令执行结果显示。
输入控件(Input
Edit单行文本框输入单行字符串。
控件对象常用函数为Text()
Box下拉框列表。
用于输入指定枚举值。
控件按钮(Buttons)供用户选择与执行
Button命令按钮。
常见的确认、取消、关闭等按钮就是这个控件。
clicked信号一定要记住。
clicked信号就是指鼠标左键按下然后释放时会发送信号从而触发相应操作。
Radio
Box多选框按钮。
布局(Layout)不同布局方式可以嵌套比如A是水平布局B是垂直布局
1、先在左侧空间栏Layouts中的某种布局方式拖动到主窗口再将组件拖入布局窗中
2、先将组件拖入主窗中并选中再点击工具栏中的某种布局方式如下图。
3、先将组件拖入主窗中并选中鼠标右键布局,选择其中一种布局方式。
所有组件的布局完成之后如下图红色框位置顶层还未布局选中顶层然后对其进行布局。
可以进行水平、垂直、网格的任意一种效果一样。
至此已经完成了所有布局按CTRLR预览的时候拉大窗口所有组件会随着窗口的变化而变化。
间隔(Spacers)实现部件布局排列美观如自动靠左对齐或者靠右对齐的方式来显示等。
Spacers部件除了名字之外只有三个属性分别是orientation、sizeType和sizeHint。
有从父类Widget继承而来的属性也有自己控件独特的属性比较方便。
名称含义objectName控件对象名称geometry相应左上角为原点的坐标与宽和高x,y,x,ysizePolicy控件大小的策略minimumSize最小的宽和高maximumSize最大的宽和高font字体cursor光标…………
有了界面定义文件我们的Python程序就可以从文件中加载UI定义并且动态
os.path.dirname(PySide2.__file__)
os.environ[QT_QPA_PLATFORM_PLUGIN_PATH]
self.ui.textEditself.ui.button.clicked.connect(self.handleCalc)def
handleCalc(self):QMessageBox.about(self.window,
先把UI文件直接转化为包含界面定义的Python代码文件然后在你的程序中使用定义界面的类执行如下的命令
__init__(self):super().__init__()#
使用界面定义的控件也是从ui里面访问self.ui.webview.load(http://www.baidu.com)app
app.exec_()通常采用动态加载比较方便因为改动界面后不需要转化直接运行特别方便。
。
比如指定颜色、字体、间距。
Qt有种定义界面显示样式的方法称之为
}就会发现所有的按钮上的文字都变成了红色的并且字体变大了。
注意这个指定界面元素
*[myclassbar2btn]:hover{border:1px
font-family:微软雅黑;font-size:15px;color:
执行槽函数如果服务端接收处理的比较慢就会导致槽函数要比较长的时间才能返回。
假设10秒钟后才接收到响应消息这时候界面就会
app.exec_()其实会让主线程进入一个死循环循环不断的处理
self.ui.buttonSend.clicked.connect(self.槽函数)如果这个槽函数很快能接收到
事件并且调用相应的函数去处理。
界面就不会僵死因为所有的操作界面的事件都能得到及时的处理。
槽函数内的某段代码处自然就没有机会去处理其他的用户操作界面的事件了当然程序就僵死了。
处理数据的操作封装成一个函数在槽函数中创建新线程然后调用封装好的函数。
处理数据]的方法服务器响应再慢也只会在新线程中阻塞主线程启动新线程后主线程就继续执行后面的代码返回继续运行Qt的事件循环处理
在另外一个线程直接操作界面可能会导致意想不到的问题比如输出显示不全甚至程序崩溃。
我们也可以自定义信号只要这个类继承QObject类就能发出自己定义的各种Qt信号具体做法如下
发出信号对象时传递的参数数据类型。
因为Qt底层是C开发的必须指定类型。
(如下的QTextBrowser
定义主线程执行的函数处理Signal信号通过connect方法
主线程信号处理函数被触发执行获取Signal里面的参数执行必要的更新界面操作
还可以定义其他种类的update_table信号update_table
自定义信号MySignals类的处理函数global_ms.text_print.connect(self.printToGui)#
printToGui(self,fb,text):fb.append(str(text))fb.ensureCursorVisible()#
emit参数和定义Signal的数量、类型必须一致global_ms.text_print.emit(self.ui.infoBox1,
智云平台是一个集成活体检测、人脸识别、关键点检测、人像分割、疲劳检测、视线追踪、微表情识别、危险驾驶动作识别、火灾检测、越狱检测、打架检测的开放算法平台。
我们程序运行的窗口需要显示自己的窗口图标这样才更像一个正式的产品。
app.setWindowIcon(QIcon(logo.png))注意这些图标png文件在使用PyInstaller创建可执行程序时也要拷贝到程序所在目录。
否则可执行程序运行后不会显示图标。
应用程序图标是放在可执行程序里面的资源。
可以在PyInstaller创建可执行程序时通过参数
--iconlogo.ico注意参数一定是存在的ico文件不能是png等图片文件。
如果你只有png文件可以通过在线的png转ico文件网站生成ico比如下面的网站IOC生成
PySide2.QtXml这样就会在当前dist我们的可执行程序
dis____|main_ui____|main_ui.exe其中
main_ui.py是包含QApplication()的GUI程序可以自己命名。
但是我建议大家可以先去掉这个参数等确定运行成功后再加上参数重新制作exe。
因为这个黑窗口可以显示出程序的报错这样我们容易找到问题的线索。
QtXml库是动态导入PyInstaller没法分析出来需要我们告诉它。
最后如果使用的是动态加载UI文件别忘了把程序所需要的ui文件拷贝到main_ui.exe同级目录中。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback