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

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.xdnf.cn/news/19484.html

相关文章:

  • 【OpenFeign】基础使用
  • Kubernetes一网络组件概述
  • Java比较器
  • 如何在 vscode 上用 git 将项目 push 到远程仓库 and 常用Git 命令
  • 剧本杀小程序系统开发:重塑社交娱乐新生态
  • 【开题答辩全过程】以 基于Spring Boot的房屋租赁系统的设计与实现为例,包含答辩的问题和答案
  • 神经网络1——sklearn的简单实现
  • leetcode笔记
  • 20.29 QLoRA适配器实战:24GB显卡轻松微调650亿参数大模型
  • 堡垒机(跳板机)入门指南:构建更安全的多服务器运维架构
  • LINUX 91 SHELL:删除空文件夹 计数
  • HCIP-Datacom Core Technology V1.0_7 BGP基础
  • (纯新手教学)计算机视觉(opencv)实战十二——模板匹配(cv2.matchTemplate)
  • SpringAI模型评估
  • 刀片电池 vs 三元锂:家庭用车选谁更长寿?
  • 海康相机开发---HCNetSDK
  • 【2025ICCV】
  • SpringCloud-服务注册-服务发现
  • 35.序列(中)
  • 植物来源细胞外囊泡的脂质组学分析
  • 【项目思维】这是一份嵌入式软件开发的大纲(简化版)
  • LabVIEW自动抗乳化测试仪
  • 高效大规模创新3D重建模型iLRM
  • 进阶篇(上):大模型训练工作流(LoRA 微调实战)
  • 链表相关OJ题
  • 2025年AI智能体开源技术栈全面解析:从基础框架到垂直应用
  • RocksDB 在 macOS M 系列 上运行时报错的解决方案
  • 音视频面试题集锦第 36 期
  • Unity:XML笔记
  • 在 Qt/C++ 中查找最近点并截断 QVector<QPointF>