最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+pyqt實(shí)現(xiàn)即時(shí)進(jìn)制轉(zhuǎn)換計(jì)算器

 更新時(shí)間:2025年09月19日 14:59:41   作者:Goona_  
在數(shù)字系統(tǒng)廣泛應(yīng)用的今天,快速準(zhǔn)確地實(shí)現(xiàn)二進(jìn)制和十進(jìn)制之間的轉(zhuǎn)換是程序員和工程師的常見(jiàn)需求,本文將使用Python和pyqt實(shí)現(xiàn)即時(shí)進(jìn)制轉(zhuǎn)換計(jì)算器,需要的小伙伴可以了解下

一、引言

在數(shù)字系統(tǒng)廣泛應(yīng)用的今天,快速準(zhǔn)確地實(shí)現(xiàn)二進(jìn)制和十進(jìn)制之間的轉(zhuǎn)換是程序員和工程師的常見(jiàn)需求。傳統(tǒng)的進(jìn)制轉(zhuǎn)換工具往往需要手動(dòng)觸發(fā)計(jì)算,效率較低且容易出錯(cuò)。為此,基于PyQt框架和Python語(yǔ)言開(kāi)發(fā)了一款即時(shí)進(jìn)制轉(zhuǎn)換計(jì)算器,通過(guò)實(shí)時(shí)響應(yīng)用戶輸入,顯著提升了進(jìn)制轉(zhuǎn)換的便捷性和準(zhǔn)確性。

二、GUI界面設(shè)計(jì)

使用PyQt5進(jìn)行界面的搭建,界面如下:

初始界面搭建采用極簡(jiǎn)風(fēng)格。用戶可通過(guò)切換頁(yè)面標(biāo)簽,自主選擇不同的轉(zhuǎn)換方向,從而實(shí)現(xiàn)任意二進(jìn)制數(shù)和十進(jìn)制數(shù)的實(shí)時(shí)轉(zhuǎn)換。

1.效果演示

可以看到,響應(yīng)速度相當(dāng)快。只要用戶輸入任意位數(shù)的二進(jìn)制/十進(jìn)制數(shù),馬上就能夠得到對(duì)應(yīng)的十進(jìn)制/二進(jìn)制表達(dá)結(jié)果。與傳統(tǒng)的進(jìn)制轉(zhuǎn)換工具相比,省去了手動(dòng)觸發(fā)計(jì)算,效率較高且結(jié)果正確性也得到保證,實(shí)時(shí)響應(yīng)用戶輸入,顯著提升了進(jìn)制轉(zhuǎn)換的便捷性和準(zhǔn)確性。

對(duì)于用戶提示,這里并未加入。直接使用正則表達(dá)式(后續(xù)詳解)規(guī)避了用戶所有輸入錯(cuò)誤情況。

2.界面設(shè)計(jì).py

通過(guò)pyuic5產(chǎn)生的GUI界面代碼jiemian.py如下:

# -*- coding: utf-8 -*-
 
# Form implementation generated from reading ui file 'jiemian.ui'
#
# Created by: PyQt5 UI code generator 5.15.11
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.
 
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
 
class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.setEnabled(True)
        Form.resize(340, 370)
        Form.setMinimumSize(QtCore.QSize(340, 370))
        Form.setMaximumSize(QtCore.QSize(340, 370))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/image1.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Form.setWindowIcon(icon)
        self.label_5 = QtWidgets.QLabel(Form)
        self.label_5.setGeometry(QtCore.QRect(180, 60, 141, 31))
        font = QtGui.QFont()
        font.setFamily("Adobe Arabic")
        font.setPointSize(16)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.label_8 = QtWidgets.QLabel(Form)
        self.label_8.setGeometry(QtCore.QRect(100, 20, 251, 31))
        font = QtGui.QFont()
        font.setFamily("Adobe Arabic")
        font.setPointSize(18)
        font.setBold(False)
        font.setWeight(50)
        self.label_8.setFont(font)
        self.label_8.setObjectName("label_8")
        self.label_10 = QtWidgets.QLabel(Form)
        self.label_10.setGeometry(QtCore.QRect(260, 50, 71, 51))
        self.label_10.setText("")
        self.label_10.setPixmap(QtGui.QPixmap(":/image1.png"))
        self.label_10.setObjectName("label_10")
        self.tabWidget = QtWidgets.QTabWidget(Form)
        self.tabWidget.setGeometry(QtCore.QRect(30, 120, 281, 221))
        self.tabWidget.setObjectName("tabWidget")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.lineEdit = QtWidgets.QLineEdit(self.tab)
        self.lineEdit.setGeometry(QtCore.QRect(30, 60, 211, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.label = QtWidgets.QLabel(self.tab)
        self.label.setGeometry(QtCore.QRect(20, 30, 221, 16))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.tab)
        self.label_2.setGeometry(QtCore.QRect(20, 100, 171, 16))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.tab)
        self.label_3.setGeometry(QtCore.QRect(30, 130, 211, 21))
        self.label_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.label_3.setText("")
        self.label_3.setObjectName("label_3")
        self.tabWidget.addTab(self.tab, "")
        self.tab_2 = QtWidgets.QWidget()
        self.tab_2.setObjectName("tab_2")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.tab_2)
        self.lineEdit_2.setGeometry(QtCore.QRect(30, 60, 211, 20))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.label_4 = QtWidgets.QLabel(self.tab_2)
        self.label_4.setGeometry(QtCore.QRect(30, 130, 211, 21))
        self.label_4.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.label_4.setText("")
        self.label_4.setObjectName("label_4")
        self.label_6 = QtWidgets.QLabel(self.tab_2)
        self.label_6.setGeometry(QtCore.QRect(20, 100, 171, 16))
        self.label_6.setObjectName("label_6")
        self.label_7 = QtWidgets.QLabel(self.tab_2)
        self.label_7.setGeometry(QtCore.QRect(20, 30, 221, 16))
        self.label_7.setObjectName("label_7")
        self.tabWidget.addTab(self.tab_2, "")
 
        self.retranslateUi(Form)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(Form)
 
    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Conversion"))
        self.label_5.setText(_translate("Form", "Designed By"))
        self.label_8.setText(_translate("Form", "進(jìn)制轉(zhuǎn)換器"))
        self.label.setText(_translate("Form", "請(qǐng)輸入二進(jìn)制數(shù):"))
        self.label_2.setText(_translate("Form", "對(duì)應(yīng)十進(jìn)制數(shù)為:"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Form", "二進(jìn)制轉(zhuǎn)十進(jìn)制"))
        self.label_6.setText(_translate("Form", "對(duì)應(yīng)二進(jìn)制數(shù)為:"))
        self.label_7.setText(_translate("Form", "請(qǐng)輸入十進(jìn)制數(shù):"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Form", "十進(jìn)制轉(zhuǎn)二進(jìn)制"))
import ziyuan_rc

三、主要程序詳解

1.導(dǎo)入相關(guān)模塊

import sys
from jiemian import *
from PyQt5.QtWidgets import QApplication, QWidget
# 正則表達(dá)式
from PyQt5.QtGui import QRegExpValidator
# 保持窗口大小和qtdesigner中的一致
from PyQt5 import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)

QRegExpValidator與正則表達(dá)式有關(guān); 不懂為啥需要導(dǎo)入Qtcore的,請(qǐng)看。

2.初始化設(shè)置

class window(QWidget, Ui_Form):
    def __init__(self):
        super(QWidget, self).__init__()
        self.setupUi(self)
 
        self.lineEdit.textChanged.connect(self.to_ten)
        self.lineEdit_2.textChanged.connect(self.to_two)
 
        # 正則表達(dá)式限制輸入
        validator1 = QRegExpValidator(QtCore.QRegExp("^[01]+$"))
        self.lineEdit.setValidator(validator1)
        validator2 = QRegExpValidator(QtCore.QRegExp("^[1-9]\d*$"))
        self.lineEdit_2.setValidator(validator2)

將lineedit綁定于to_ten,一旦lineedit的內(nèi)容text發(fā)生變化,則去執(zhí)行to_ten里的內(nèi)容;lineedit_2同理;對(duì)lineedit使用正則表達(dá)式"^[01]+$",目的是限制用戶輸入僅由0與1組成,直到字符串的末尾,同時(shí)也排除了其他特殊符號(hào)的輸入(如“.”、“;”等);對(duì)lineedit_2使用正則表達(dá)式"^[1-9]\d*$",目的是限制用戶僅能輸入十進(jìn)制整數(shù),“^[1-9]”表示起始位置以[1-9]中任意數(shù)字開(kāi)頭,“\d”等價(jià)于[0-9],表示后續(xù)數(shù)字可從[0-9]中任選。

3.二進(jìn)制轉(zhuǎn)十進(jìn)制

    def to_ten(self):
        """二進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制"""
        sum = 0
        shuru = self.lineEdit.text()
        shuru_len = len(shuru)
 
        for i in range(shuru_len):
            sum = sum+pow(2,(shuru_len-1-i))*int(shuru[i])
 
        self.label_3.setText(str(sum))

sum表示最終求和結(jié)果;分別讀取lineedit的內(nèi)容和長(zhǎng)度存儲(chǔ)在shuru和shuru_len中;以for循環(huán)遍歷用戶輸入的字符串,對(duì)每一項(xiàng)進(jìn)行加權(quán)求和,并將累加結(jié)果賦予sum中;最后將計(jì)算結(jié)果顯示在label_3上。

“按權(quán)展開(kāi)求和法”思路:

4.十進(jìn)制轉(zhuǎn)二進(jìn)制

    def to_two(self):
        """十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制"""
        yu_lst = []
 
        shuru = int(self.lineEdit_2.text())
        while (shuru != 0):
            yu = shuru % 2
            shuru = shuru//2
            yu_lst.append(str(yu))
 
        yu_lst.reverse()
        self.label_4.setText(''.join(yu_lst))

yu_lst用于存儲(chǔ)余數(shù);讀取lineedit_2的內(nèi)容并將其強(qiáng)制int轉(zhuǎn)換后存儲(chǔ)在shuru中;以shuru不為0作為while循環(huán)的依據(jù);將每次得到的余數(shù)yu添加至列表yu_lst末尾,并以商更新shuru 的值,直至商為0時(shí),結(jié)束while循環(huán);最后反轉(zhuǎn)列表yu_lst(從高位到低位排列)后,合并為新的字符串顯示在label_4上。

“除2取余法”思路:

四、總程序代碼

import sys
from jiemian import *
from PyQt5.QtWidgets import QApplication, QWidget
# 正則表達(dá)式
from PyQt5.QtGui import QRegExpValidator
# 保持窗口大小和qtdesigner中的一致
from PyQt5 import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
 
class window(QWidget, Ui_Form):
    def __init__(self):
        super(QWidget, self).__init__()
        self.setupUi(self)
 
        self.lineEdit.textChanged.connect(self.to_ten)
        self.lineEdit_2.textChanged.connect(self.to_two)
 
        # 正則表達(dá)式限制輸入
        validator1 = QRegExpValidator(QtCore.QRegExp("^[01]+$"))
        self.lineEdit.setValidator(validator1)
        validator2 = QRegExpValidator(QtCore.QRegExp("^[1-9]\d*$"))
        self.lineEdit_2.setValidator(validator2)
 
    def to_ten(self):
        """二進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制"""
        sum = 0
        shuru = self.lineEdit.text()
        shuru_len = len(shuru)
 
        for i in range(shuru_len):
            sum = sum+pow(2,(shuru_len-1-i))*int(shuru[i])
 
        self.label_3.setText(str(sum))
 
    def to_two(self):
        """十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制"""
        yu_lst = []
 
        shuru = int(self.lineEdit_2.text())
        while (shuru != 0):
            yu = shuru % 2
            shuru = shuru//2
            yu_lst.append(str(yu))
 
        yu_lst.reverse()
        self.label_4.setText(''.join(yu_lst))
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = window()
    w.show()
    sys.exit(app.exec_())

到此這篇關(guān)于Python+pyqt實(shí)現(xiàn)即時(shí)進(jìn)制轉(zhuǎn)換計(jì)算器的文章就介紹到這了,更多相關(guān)Python進(jìn)制轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python如何在bool函數(shù)中取值

    Python如何在bool函數(shù)中取值

    這篇文章主要介紹了Python如何在bool函數(shù)中取值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • python基礎(chǔ)之單分派泛函數(shù)singledispatch

    python基礎(chǔ)之單分派泛函數(shù)singledispatch

    這篇文章主要介紹了python基礎(chǔ)之單分派泛函數(shù)singledispatch問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 探究Python中isalnum()方法的使用

    探究Python中isalnum()方法的使用

    這篇文章主要介紹了探究Python中isalnum()方法的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • 13個(gè)你可能未使用過(guò)的Python特性分享

    13個(gè)你可能未使用過(guò)的Python特性分享

    Python?是頂級(jí)編程語(yǔ)言之一,它具有許多程序員從未使用過(guò)的許多隱藏功能。在這篇博客中,將和大家分享一下你可能從未使用過(guò)的13?個(gè)?Python?特性,感興趣的可以學(xué)習(xí)一下
    2022-11-11
  • python實(shí)現(xiàn)批處理文件

    python實(shí)現(xiàn)批處理文件

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)批處理文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 20行Python代碼實(shí)現(xiàn)一款永久免費(fèi)PDF編輯工具的實(shí)現(xiàn)

    20行Python代碼實(shí)現(xiàn)一款永久免費(fèi)PDF編輯工具的實(shí)現(xiàn)

    這篇文章主要介紹了20行Python代碼實(shí)現(xiàn)一款永久免費(fèi)PDF編輯工具的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 詳解如何通過(guò)Python制作一個(gè)密碼生成器

    詳解如何通過(guò)Python制作一個(gè)密碼生成器

    定期更換密碼是一種非常重要的安全措施,這種做法可以有效地保護(hù)你的賬戶和個(gè)人信息不受黑客和網(wǎng)絡(luò)攻擊者的侵害。所以本文就來(lái)用Python制作一個(gè)密碼生成器吧
    2023-05-05
  • Linux(Redhat)安裝python3.6虛擬環(huán)境(推薦)

    Linux(Redhat)安裝python3.6虛擬環(huán)境(推薦)

    這篇文章主要介紹了Linux(Redhat)安裝python3.6虛擬環(huán)境,非常不錯(cuò),具有參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-05-05
  • Python中optionParser模塊的使用方法實(shí)例教程

    Python中optionParser模塊的使用方法實(shí)例教程

    這篇文章主要介紹了Python中optionParser模塊的使用方法,功能非常強(qiáng)大,需要的朋友可以參考下
    2014-08-08
  • 基于python goto的正確用法說(shuō)明

    基于python goto的正確用法說(shuō)明

    這篇文章主要介紹了基于python goto的正確用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03

最新評(píng)論

佛学| 阳新县| 蓝山县| 阳新县| 嘉兴市| 潼南县| 榆树市| 松滋市| 丰原市| 徐汇区| 茶陵县| 濉溪县| 高安市| 仪征市| 黑龙江省| 静宁县| 华安县| 茶陵县| 泰州市| 绥滨县| 静安区| 山东| 顺义区| 保山市| 赤壁市| 汝南县| 安远县| 克拉玛依市| 九龙城区| 丰镇市| 美姑县| 平定县| 昆明市| 龙口市| 青海省| 山阴县| 修文县| 无棣县| 西昌市| 贡山| 龙海市|