欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)用戶(hù)輸入,顯著提升了進(jìn)制轉(zhuǎn)換的便捷性和準(zhǔn)確性。

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

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

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

1.效果演示

可以看到,響應(yīng)速度相當(dāng)快。只要用戶(hù)輸入任意位數(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)用戶(hù)輸入,顯著提升了進(jìn)制轉(zhuǎn)換的便捷性和準(zhǔn)確性。

對(duì)于用戶(hù)提示,這里并未加入。直接使用正則表達(dá)式(后續(xù)詳解)規(guī)避了用戶(hù)所有輸入錯(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]+$",目的是限制用戶(hù)輸入僅由0與1組成,直到字符串的末尾,同時(shí)也排除了其他特殊符號(hào)的輸入(如“.”、“;”等);對(duì)lineedit_2使用正則表達(dá)式"^[1-9]\d*$",目的是限制用戶(hù)僅能輸入十進(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)遍歷用戶(hù)輸入的字符串,對(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和Plotly繪制各種類(lèi)型3D圖形的方法

    使用Python和Plotly繪制各種類(lèi)型3D圖形的方法

    Python語(yǔ)言擁有豐富的數(shù)據(jù)可視化庫(kù),其中Plotly是一款流行的工具,提供了繪制高質(zhì)量三維圖形的功能,本文將介紹如何使用Python和Plotly來(lái)繪制各種類(lèi)型的3D圖形,并給出代碼實(shí)例,需要的朋友可以參考下
    2024-05-05
  • python3 dict ndarray 存成json,并保留原數(shù)據(jù)精度的實(shí)例

    python3 dict ndarray 存成json,并保留原數(shù)據(jù)精度的實(shí)例

    今天小編就為大家分享一篇python3 dict ndarray 存成json,并保留原數(shù)據(jù)精度的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python一行代碼就能實(shí)現(xiàn)數(shù)據(jù)分析的pandas-profiling庫(kù)

    python一行代碼就能實(shí)現(xiàn)數(shù)據(jù)分析的pandas-profiling庫(kù)

    這篇文章主要為大家介紹了python一行代碼就能實(shí)現(xiàn)數(shù)據(jù)分析的pandas-profiling庫(kù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python urlopen()和urlretrieve()用法解析

    Python urlopen()和urlretrieve()用法解析

    這篇文章主要介紹了Python urlopen()和urlretrieve()用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python學(xué)習(xí)小技巧之利用字典的默認(rèn)行為

    Python學(xué)習(xí)小技巧之利用字典的默認(rèn)行為

    這篇文章主要給大家介紹了Python學(xué)習(xí)小技巧之利用字典的默認(rèn)行為的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-05-05
  • Python函數(shù)和模塊的使用詳情

    Python函數(shù)和模塊的使用詳情

    這篇文章主要介紹了Python函數(shù)和模塊的使用詳情,文章基于python的相關(guān)資料展開(kāi)主題的具體介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • 關(guān)于python下cv.waitKey無(wú)響應(yīng)的原因及解決方法

    關(guān)于python下cv.waitKey無(wú)響應(yīng)的原因及解決方法

    今天小編就為大家分享一篇關(guān)于python下cv.waitKey無(wú)響應(yīng)的原因及解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python生成器以及應(yīng)用實(shí)例解析

    Python生成器以及應(yīng)用實(shí)例解析

    這篇文章主要介紹了Python生成器以及應(yīng)用實(shí)例解析,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 使用OpenCV實(shí)現(xiàn)道路車(chē)輛計(jì)數(shù)的使用方法

    使用OpenCV實(shí)現(xiàn)道路車(chē)輛計(jì)數(shù)的使用方法

    這篇文章主要介紹了使用OpenCV實(shí)現(xiàn)道路車(chē)輛計(jì)數(shù)的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Selenium自動(dòng)化測(cè)試工具使用方法匯總

    Selenium自動(dòng)化測(cè)試工具使用方法匯總

    這篇文章主要介紹了Selenium自動(dòng)化測(cè)試工具使用方法匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評(píng)論