from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QApplication,QWidgetclass MyWindow(QWidget):def __init__(self):super().__init__()self.ui = QUiLoader().load('trans.ui')self.ui.show()#stor data type dictionaryself.lengthVar = {'米':100, '千米':1000, '厘米':1, '分米':10}self.weightVar = {'克':1, '千克':1000}self.TypeDict = {'length':self.lengthVar,'weight':self.weightVar}self.ui.dataTypeComboBox.addItems(self.TypeDict.keys())self.ui.oneInputComboBox.addItems(self.lengthVar.keys())self.ui.twoInputComboBox.addItems(self.lengthVar.keys())def bind(self):self.dataTypeComboBox.currentTextChanged.connect(self.typeChanged)self.calcBtn.clicked.connect(self.calc)def calc(self):bigType = self.dataTypComboBox.currentText()# 获取第一个输入框的值value = self.oneInputEditLine.text()if value == '':returncurrentType  = self.oneInputComboBox.currentText()transType = self.twoInputComboBox.currentText()standardization = float(value) * self.TypeDict[bigType][currentType]result = standardization / self.TypeDict[bigType][transType]self.originDataLabel.setText(f'{value} {currentType}')self.transDataLabel.setText(f'{result} {transType}')self.twoInputEditLine.setText(str(result))def typeChanged(self, text):self.oneInputComboBox.clear()self.twoInputComboBox.clear()self.oneInputComboBox.addItems(self.TypeDict[text].keys())self.twoInputComboBox.addItems(self.TypeDict[text].keys())# if __name__ =='name':
app = QApplication([])
window = MyWindow()
app.exec()

你现在的代码大致思路对,但有几个关键问题,导致计算部分跑不起来:


❌ 1. 控件访问方式不一致

__init__ 里,你已经把 UI 加载到 self.ui 里了:

self.ui = QUiLoader().load('trans.ui')

但是在后面的代码里,你有些地方写的是 self.dataTypeComboBoxself.calcBtn,而不是 self.ui.dataTypeComboBox

👉 因为 所有 Designer 里的控件都属于 self.ui,所以必须通过 self.ui.xxx 来访问。

比如:

self.dataTypeComboBox.currentTextChanged.connect(self.typeChanged)

要改成:

self.ui.dataTypeComboBox.currentTextChanged.connect(self.typeChanged)

同样地,在 calc 里:

bigType = self.dataTypComboBox.currentText()   # ❌ 少了 e,还没加 self.ui

要改成:

bigType = self.ui.dataTypeComboBox.currentText()

❌ 2. bind() 没有被调用

你定义了 bind() 方法来连接信号槽,但是在 __init__ 里没有调用。
所以按钮点了根本不会触发 calc()

要加一句:

self.bind()

❌ 3. 控件名字可能拼错

calc() 里:

bigType = self.dataTypComboBox.currentText()

这里应该是 dataTypeComboBox,而不是 dataTypComboBox(少了一个 e)。


✅ 修改后的代码

我帮你整理一份能运行的版本:

from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QApplication, QWidgetclass MyWindow(QWidget):def __init__(self):super().__init__()self.ui = QUiLoader().load('trans.ui')self.ui.show()# 存放数据字典self.lengthVar = {'米':100, '千米':1000, '厘米':1, '分米':10}self.weightVar = {'克':1, '千克':1000}self.TypeDict = {'length':self.lengthVar, 'weight':self.weightVar}# 初始化下拉框self.ui.dataTypeComboBox.addItems(self.TypeDict.keys())self.ui.oneInputComboBox.addItems(self.lengthVar.keys())self.ui.twoInputComboBox.addItems(self.lengthVar.keys())# ⭐ 别忘了绑定信号self.bind()def bind(self):self.ui.dataTypeComboBox.currentTextChanged.connect(self.typeChanged)self.ui.calcBtn.clicked.connect(self.calc)def calc(self):bigType = self.ui.dataTypeComboBox.currentText()# 获取第一个输入框的值value = self.ui.oneInputEditLine.text()if value == '':returncurrentType  = self.ui.oneInputComboBox.currentText()transType = self.ui.twoInputComboBox.currentText()standardization = float(value) * self.TypeDict[bigType][currentType]result = standardization / self.TypeDict[bigType][transType]self.ui.originDataLabel.setText(f'{value} {currentType} = ')self.ui.transDataLabel.setText(f'{result} {transType}')self.ui.twoInputEditLine.setText(str(result))def typeChanged(self, text):self.ui.oneInputComboBox.clear()self.ui.twoInputComboBox.clear()self.ui.oneInputComboBox.addItems(self.TypeDict[text].keys())self.ui.twoInputComboBox.addItems(self.TypeDict[text].keys())app = QApplication([])
window = MyWindow()
app.exec()

。自己也,在git里做了一份代码点击查看


🔑 总结

  1. 用 QUiLoader 加载 .ui 时,所有控件都在 self.ui 里。

  2. 信号绑定必须调用,比如 self.bind()

  3. 注意控件名拼写一致(不要漏字母)。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95315.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95315.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95315.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

再见 K8s!3款开源的云原生部署工具

前文,和大家分享了云原生中的核心工具 K8s: 关于 K8s:入门,这篇就够了 K8s是个好东西,就是上手门槛有点高。这不,需求就来了? 有需求,就有工具。 为了解决K8s的配置难题&#xf…

C++ 快速复习指南(上半部分)

1.基础语法基本结构#include <iostream> 头名 using namesapce std ; 统一使用命名空间 int main () { 程序执行门户 主题内容}基本输出 cout << "string " << endl; // 输出 string 变量和数据类型 格式int intger 10 ;常量的引入 需要在变量…

ArcGIS Pro 地图打包与解包

如果需要在ArcGIS Pro 打包某一个地图文档&#xff0c;在 菜单栏中 点击 共享&#xff0c;点击地图。弹出 打包地图 面板&#xff0c;可以打包到Online、打包到地图包&#xff0c;选择将包保存到文件&#xff0c;修改项目详细信息&#xff0c;点击 包&#xff0c;即可实现打包。…

sunset: twilight靶场

sunset: twilight 来自 <sunset: twilight ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.128&#xff0c;靶场IP192.168.23.145 3&#xff0c;对靶机…

【机器学习基础】无监督学习算法的现代演进:从数据探索到智能系统的自主发现能力

1. 引言:无监督学习在人工智能革命中的核心价值 在人工智能技术飞速发展的今天,无监督学习正在成为推动AI系统实现真正智能的关键技术。与需要大量标注数据的监督学习不同,无监督学习能够从原始数据中自主发现隐藏的模式和结构,这种能力使其在现代AI应用中具有不可替代的价…

PetaLinux的JTAG启动

csdn–PetaLinux 使用技巧与缓存配置 xilinx官网–PetaLinux 工具文档参考指南 (ug1144) xilinx官网–设备树配置文档 内核官网–设备树文档 软硬件准备 分类项目说明/用途验证方法示例硬件JTAG 线JTAG 下载、调试—UART 串口线查看 zynq 启动日志—网口线用于 TFTP 下载—…

单片机中的按键防抖

按钮&#xff08;按键&#xff09;抖动是单片机开发中常见的硬件问题&#xff0c;本质是机械触点接触瞬间的物理弹跳导致的电信号不稳定。消除抖动&#xff08;防抖&#xff09;是确保按键状态检测准确的关键&#xff0c;下面从原理到实现详细讲解。 一、按钮抖动的原理&#x…

面经分享--小米Java一面

目录 1.Kafka和RocketMQ的区别 2.反射的作用 3.类加载的具体过程&#xff0c;双亲委派模型的机制 4.TCP的四次挥手 5.多线程的优势 6.死锁产生的原因&#xff0c;怎么解决 7.Java并发的工作原理 8.常用的git命令 9.算法题 1.leetcode 3.无重复字符的最长子串&#xff…

Python在边缘计算与物联网中的创新实践:实时数据处理与设备控制

近年来&#xff0c;Python语言的普及度持续攀升&#xff0c;尤其在人工智能、数据科学等热门领域备受青睐。然而&#xff0c;一个新兴趋势——边缘计算与物联网&#xff08;IoT&#xff09;的结合——正悄然改变技术格局。边缘计算强调在数据源头进行实时处理&#xff0c;减少云…

Spring Cloud Gateway 网关(五)

目录 一 概念引入 二 具体使用 1 首先创建一个网关模块 2 启动类 3 配置类 4 对应方法的修改 5 展示借助81端口进行转发控制 6 断言规则​编辑 三 过滤器 1 将前置的请求参数给过滤掉&#xff0c;降低繁琐程度。 2 默认过滤器 3 全局过滤器 4 自定义过滤器工厂 5…

产品经理操作手册(8)——业务需求文档(BRD)

一、BRD的定义与价值 **业务需求文档(BRD)**是产品开发前期的基础性文档&#xff0c;它将业务诉求转化为结构化的产品需求&#xff0c;是连接业务方与交付团队的桥梁。“BRD不仅是一份文档&#xff0c;而是一个对齐的过程。”BRD核心价值 统一认知&#xff1a;确保各方对业务目…

Excel表格多级下拉选项,如何制作?

之前分享过如何设置下拉选项&#xff0c;但那只是简单的一级下拉菜单&#xff0c;今天再给大家分享多级下拉菜单如何制作。也就是根据前面的下拉选项改变后面的选项。 我们现来复习一级下拉菜单&#xff0c;再接着讲多级下拉菜单 一级下拉选项 首先我们先将表格内容凑填写好…

[Sync_ai_vid] 唇形同步评判器 | 图像与视频处理器 | GPU测试

第4章&#xff1a;SyncNet唇形同步评判器 在前几章中&#xff0c;我们了解了唇形同步推理流程如何协调生成唇形同步视频&#xff0c;以及音频特征提取器(Whisper)如何为LatentSync UNet提供关键音频线索。 UNet利用这些线索巧妙调整唇部动作。但我们如何判断UNet的生成效果&a…

算法:插入排序

插入排序&#xff08;直接插入排序&#xff09; 是一种基于“插入”的排序 思路 它的核心思想是把数组分成两部分&#xff1a;一部分是有序区&#xff0c;另一部分是乱序区也就是待排序区。 每次从未排序部分“取出”一个元素&#xff0c;插入到前半部分合适的位置&#xff0c;…

MCP Go SDK

MCP Go SDK v0.3.0 Open in GitHub Codespaces &#xff08;在 GitHub Codespaces 中打开&#xff09; BREAKING CHANGES &#xff08;重大变更&#xff09; This version contains breaking changes. See the release notes for details PkgGoDev &#xff08;Go 官方包文档入…

面试问题详解十一:Qt中的线程池与 QRunnable

在 Qt 中&#xff0c;多线程的使用是开发高性能 GUI 应用的重要组成部分。为了避免频繁创建和销毁线程带来的资源消耗&#xff0c;Qt 提供了 线程池&#xff08;QThreadPool&#xff09; 和 可运行任务&#xff08;QRunnable&#xff09; 的机制&#xff0c;帮助我们更加高效地…

spring-ai-alibaba-deepresearch 学习(五)——BackgroundInvestigationNode

本篇为spring-ai-alibaba学习系列第三十一篇前面介绍 rewrite_multi_query 节点最后会根据用户上传文件标识 user_upload_file 决定下一节点现在来看一下第二个分支&#xff0c;当 user_upload_file 为 false 时&#xff0c;转入 background_investigator 节点该节点主要是负责…

ESP32S3:开发环境搭建、VSCODE 单步调试、Systemview 分析任务运行情况

目标: 实现点灯工程&#xff0c;并且可以基于 vscode 进行单步调试与 systemview 来分析任务运行情况。 环境搭建 如需在 ESP32-S3 上使用 ESP-IDF&#xff0c;请安装以下软件&#xff1a; 设置 工具链&#xff0c;用于编译 ESP32-S3 代码&#xff1b;编译构建工具 —— CMa…

linux系统学习(6.软件包管理)

目录 一、概述 1.分类 2.命名方式 3.一个软件包的组成 1. 软件包的基本定义 2. 一个软件包通常包含的部分 ① 程序文件 ② 库文件 ③ 配置文件 ④ 数据文件 / 资源文件 ⑤ 文档 / 帮助信息 ⑥ 服务脚本 / 单元文件&#xff08;如果是服务型软件&#xff09; ⑦ 包的…

数据结构青铜到王者第八话---队列(Queue)

目录 一、队列(Queue) 1、概念 2、队列的使用 3、队列模拟实现 4、循环队列 4.1数组下标循环的小技巧&#xff08;1&#xff09;下标最后再往后(offset 小于 array.length): index (index offset) % array.length 4.2如何区分空与满 4.3设计循环队列 二、双端队列 (Deq…