深圳市外贸网站建设多少钱政务网站建设 紧急通知

张小明 2026/1/9 4:57:42
深圳市外贸网站建设多少钱,政务网站建设 紧急通知,室内装饰设计师国家职业技能标准,公司怎么搭建自己网站DockWidget窗口大小改变时#xff0c;内部的按钮能够自动重新排列#xff0c;以最佳方式利用可用空间。具体表现为#xff1a;1. 当水平空间足够时#xff0c;按钮排成一行2. 当水平空间不足时#xff0c;按钮自动换行程序环境Python 3.8.9pyside66.1.3pip install pyside…DockWidget窗口大小改变时内部的按钮能够自动重新排列以最佳方式利用可用空间。具体表现为1. 当水平空间足够时按钮排成一行2. 当水平空间不足时按钮自动换行程序环境Python 3.8.9pyside66.1.3pip install pyside66.1.3设计结构图解微信图片_2025-10-22_152148_073实现效果20251022_155729demo代码获取Giteedockwidget-demo百度网盘https://pan.baidu.com/s/1PRAjVGBtLQFZkWnZsJ2f2A?pwdeitiimage代码实现以下是完整的实现代码import reimport sysfrom PySide6.QtWidgets import QApplicationfrom ui_main_windowtest import *class MainWindow(QMainWindow, Ui_MainWindow):def __init__(self):super().__init__()self.setupUi(self)self.row 0 # 行self.col 0 # 列self.buttons_per_row 0 # 每行按钮数量self.scrollArea.widget().installEventFilter(self)# 获取布局参数self.h_spacing self.gridLayout_2.horizontalSpacing()self.v_spacing self.gridLayout_2.verticalSpacing()self.margins self.gridLayout_2.contentsMargins()# 获取第一个按钮的参考尺寸if self.gridLayout_2.count() 0:first_button self.gridLayout_2.itemAt(0).widget()self.button_width first_button.sizeHint().width() self.h_spacingself.button_height first_button.sizeHint().height() self.v_spacing 10 # 根据测试这里10容差可以防止出现程序无限执行rearrangeButtons方法的情况def eventFilter(self, obj, event):监控ScrollArea内widget的resize事件if event.type() QEvent.Resize:# 获取当前可用宽高available_height self.scrollArea.widget().size().height()available_width self.scrollArea.widget().size().width()# 检查是否需要重新排列按钮if available_height (self.row 1) * self.button_height and available_width self.button_width:self.rearrangeButtons()elif available_width (self.buttons_per_row 1) * self.button_width and available_height self.button_height:self.rearrangeButtons()return super().eventFilter(obj, event)def rearrangeButtons(self):重新排列按钮以适应新的窗口大小# 计算新的每行按钮数量available_width self.scrollArea.widget().width() - self.margins.left() - self.margins.right()new_buttons_per_row max(1, available_width // self.button_width)# 如果每行按钮数量没有变化则不需要重新排列if new_buttons_per_row ! self.buttons_per_row:self.buttons_per_row new_buttons_per_rowelse:return# 收集所有按钮buttons []for i in range(self.gridLayout_2.count()):item self.gridLayout_2.itemAt(i)if item.widget():buttons.append(item.widget())# 按按钮名称自然排序1, 2, 3, ..., 10, 11不排序每次重启程序顺序都会不一样buttons.sort(keylambda btn: [int(text) if text.isdigit() else text.lower()for text in re.split(([0-9]), btn.objectName())])# 清除当前布局while self.gridLayout_2.count():item self.gridLayout_2.takeAt(0)if item.widget():item.widget().setParent(None)# 重新排列按钮for i, button in enumerate(buttons):self.row i // self.buttons_per_rowself.col i % self.buttons_per_rowself.gridLayout_2.addWidget(button, self.row, self.col)if __name__ __main__:app QApplication(sys.argv)window MainWindow()window.show()sys.exit(app.exec())代码解析1. 初始化布局参数获取了布局的关键参数,这些参数用于准确计算可用空间和按钮尺寸self.h_spacing self.gridLayout_2.horizontalSpacing()self.v_spacing self.gridLayout_2.verticalSpacing()self.margins self.gridLayout_2.contentsMargins()2. 计算按钮尺寸我们以scrollArea第一个Qwidget为参考计算Qwidget的宽度和高度(所有Qwidget宽高必须统一)ps:这里变量名写成了button其实获取的是Qwidget的宽度和高度first_button self.gridLayout_2.itemAt(0).widget()self.button_width first_button.sizeHint().width() self.h_spacingself.button_height first_button.sizeHint().height() self.v_spacing 10注意这里加了10像素的容差这是为了避免在某些边界情况下出现无限循环的问题。3. 事件过滤器通过eventFilter监控ScrollArea内widget的resize事件def eventFilter(self, obj, event):if event.type() QEvent.Resize:# 获取当前可用宽高available_height self.scrollArea.widget().size().height()available_width self.scrollArea.widget().size().width()# 检查是否需要重新排列if available_height (self.row 1) * self.button_height and available_width self.button_width:self.rearrangeButtons()elif available_width (self.buttons_per_row 1) * self.button_width and available_height self.button_height:self.rearrangeButtons()return super().eventFilter(obj, event)4. 重新排列按钮rearrangeButtons方法是核心逻辑所在def rearrangeButtons(self):# 计算新的每行按钮数量available_width self.scrollArea.widget().width() - self.margins.left() - self.margins.right()new_buttons_per_row max(1, available_width // self.button_width)# 如果每行按钮数量没有变化则不需要重新排列if new_buttons_per_row ! self.buttons_per_row:self.buttons_per_row new_buttons_per_rowelse:return# 收集并排序按钮buttons []for i in range(self.gridLayout_2.count()):item self.gridLayout_2.itemAt(i)if item.widget():buttons.append(item.widget())# 使用正则表达式实现按钮名称的自然排序,可以通过命名的方式强制规定Qwidget组件顺序buttons.sort(keylambda btn: [int(text) if text.isdigit() else text.lower()for text in re.split(([0-9]), btn.objectName())])# 清除当前布局while self.gridLayout_2.count():item self.gridLayout_2.takeAt(0)if item.widget():item.widget().setParent(None)# 重新排列for i, button in enumerate(buttons):self.row i // self.buttons_per_rowself.col i % self.buttons_per_rowself.gridLayout_2.addWidget(button, self.row, self.col)注意事项按钮尺寸DockWidget下的所有Qwidget应具有相同的尺寸否则布局可能会不均匀容差设置代码中的10像素容差是经验值可能需要根据实际情况调整
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做微商推广有哪些好的分类信息网站代人做网站

第一章:Open-AutoGLM官方KEY免费通道关闭预警Open-AutoGLM 作为一款广泛应用于自动化代码生成与自然语言理解任务的开源大模型工具,近期宣布将正式关闭其官方 API 密钥的免费申请通道。这一调整意味着开发者将无法再通过公开注册方式获取免费调用额度&am…

张小明 2026/1/7 19:25:27 网站建设

怎么做淘宝客网站赚钱新浪sae部署wordpress配置

数据字典与状态表的全面解析 一、数据字典的创建 1.1 数据字典结构与创建流程 数据字典的结构是固定的,以字段为行,属性为列。在填充数据字典之前,需要确定满足项目需求的必要属性,不过在推进过程中可能需要添加属性。创建数据字典的流程如下: graph LRA[识别业务数据…

张小明 2026/1/7 11:22:00 网站建设

7k网站怎么做学校网站欣赏中文

第一章:Asyncio 并发性能测试概述在现代高性能网络应用开发中,异步编程已成为提升并发处理能力的关键技术之一。Python 的 asyncio 库提供了完整的异步 I/O 框架,支持单线程内高效管理成千上万的并发任务。本章聚焦于如何对基于 asyncio 构建…

张小明 2026/1/7 10:08:00 网站建设

asp网站有哪些apicloud wordpress

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个Zotero插件,实现以下功能:1) 基于机器学习自动对文献进行分类;2) 根据用户阅读历史智能推荐相关文献;3) 自动提取文献关键信…

张小明 2026/1/7 19:11:33 网站建设

app网站建站系统下载厦门网站建设高级课程

SIP协议中SDP媒体协商机制的深度剖析与全景研究报告 1. 绪论:SIP与SDP的架构共生关系 在现代IP通信(VoIP)和统一通信(UC)架构中,会话发起协议(Session Initiation Protocol, SIP)作…

张小明 2026/1/7 19:11:33 网站建设

做视频网站需要什么空间吗wordpress换域名后链接怎么改过来

基于Seed-Coder-8B-Base的IDE插件设计思路与实现路径 在现代软件开发中,开发者每天面对的是越来越复杂的项目结构、日益增长的代码量和不断提速的交付压力。尽管主流IDE已经提供了诸如语法高亮、自动补全、重构支持等基础辅助功能,但这些工具大多停留在“…

张小明 2026/1/7 19:12:01 网站建设