当前位置: 首页 > news >正文

pyside6小项目:进制转换器

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.dtcms.com/a/360786.html

相关文章:

  • 《架构师手记:SpringCloud整合Nacos实战·一》
  • 2.MySQL库的操作
  • Spark实现推荐系统中的相似度算法
  • 【LeetCode】19、删除链表的倒数第N个结点
  • P1803 凌乱的yyy / 线段覆盖
  • 802.11 和 802.1X
  • 计算机毕设选题:基于Python+Django的健康饮食管理系统设计【源码+文档+调试】
  • 网络原理——TCP/UDP/IP
  • 【面试场景题】如何快速判断几十亿个数中是否存在某个数
  • 【面试场景题】100M网络带宽能不能支撑QPS3000
  • (3dnr)多帧视频图像去噪 (一)
  • 第六章 Vue3 + Three.js 实现高质量全景图查看器:从基础到优化
  • 站在巨人的肩膀上:gRPC通过HTTP/2构建云原生时代的通信标准
  • Goframe 框架下HTTP反向代理并支持MCP所需的SSE协议的实现
  • 【深度学习基础】深度学习中的早停法:从理论到实践的全面解析
  • 【php反序列化字符串逃逸】
  • word运行时错误‘53’,文件未找到:MathPage.WLL,更改加载项路径完美解决
  • Android原生HttpURLConnection上传图片方案
  • mysql导出csv中字段里有换行符的处理办法及hive导出处理办法
  • 印度数据源 Java 对接文档
  • 【DeepSeek】蓝耘元生代 | 蓝耘MaaS平台与DeepSeek-V3.1重构智能应用开发
  • 打造智能写作工作流:n8n + 蓝耘MaaS平台完整实战指南
  • 20.30 QLoRA微调终极指南:Hugging Face参数优化实战,24GB显存直降50%性能不减
  • linux centos 忘记开机密码,重置root密码的两种方式
  • 【C++】类型转换详解:显式与隐式转换的艺术
  • MySQL 慢查询 debug:索引没生效的三重陷阱
  • 【STM32】状态机(State Machine)
  • 力扣每日一刷Day 19
  • RK3399内核驱动实战:获取设备号控制LED的四种方法(由浅入深、代码注释详尽)
  • 【CMake】Ctest,Cpack