Chinaunix

标题: 请教hex函数将十进制转换为十六进制的问题 [打印本页]

作者: gdmgb520    时间: 2013-09-25 13:12
标题: 请教hex函数将十进制转换为十六进制的问题
刚学Python,想自己写个十进制与十六进制转换的小工具,使用PyQt写界面。遇到下面问题,很疑惑,希望能得到大家帮助。谢谢。

>>> hex(12)
'0xc'
在Python Shell里这样是可以的。
我现在需要从textedit控件里得到text文件,并将文本转换为十六进制,输出到另一个textedit里。
在执行下面语句是就会出错:
dat = hex(eval(text))
其中text是从文本框中取到的数据,我直接吧text复制为'12'也不行,但是直接在在Python shell中执行是可以的,放在整个文件中就不行。
>>> t = '12'
>>> d = hex(eval(t))
>>> d
'0xc'
>>>



作者: 代号:军刀    时间: 2013-09-25 15:30
可能是你脚本其他地方有问题吧
作者: conn2011    时间: 2013-09-25 15:45
PyQt里的控件获取的字符串均为QString类型,用unicode转一下才能像你这样用。
作者: gdmgb520    时间: 2013-09-25 16:53
回复 3# conn2011

谢谢,我有用unicode转换,但是还是不行,
我晚上回去帖我的详细代码。

谢谢!


   
作者: gdmgb520    时间: 2013-09-26 13:13
标题: 完整代码如下,出现问题的是dec2hex这个函数
本帖最后由 gdmgb520 于 2013-09-26 13:20 编辑
  1. import sys
  2. import string
  3. from math import *
  4. from PyQt4.QtCore import *
  5. from PyQt4.QtGui import *

  6. class Form(QDialog):
  7.     def __init__(self,parent=None):
  8.         super(Form,self).__init__(parent)
  9.         self.fromText = QTextEdit()
  10.         self.toText = QTextEdit()
  11.         self.convertorButton = QPushButton( "convertor" )
  12.         self.hex2decButton = QPushButton( "hex2dec" )
  13.         self.dec2hexButton = QPushButton( "dec2hex" )
  14.         
  15.         layout = QVBoxLayout()
  16.         layout.addWidget(self.fromText)
  17.         layout.addWidget(self.toText)
  18.         layout.addWidget(self.convertorButton)
  19.         layout.addWidget(self.hex2decButton)
  20.         layout.addWidget(self.dec2hexButton)
  21.         
  22.         self.setLayout(layout)
  23.         self.fromText.setFocus()
  24.         
  25.         self.connect( self.convertorButton, SIGNAL( 'clicked()' ), self.updateUi )
  26.         self.connect( self.hex2decButton, SIGNAL( 'clicked()' ), self.hex2dec )
  27.         self.connect( self.dec2hexButton, SIGNAL( 'clicked()' ), self.dec2hex )
  28.         
  29.         self.setWindowTitle("DataConveter")
  30.         
  31.     def updateUi(self):
  32.         try:
  33.             text = unicode(self.fromText.toPlainText())  #unicode(self.fromText.text())
  34.             self.fromText.clear()
  35.             self.toText.append("%s = <b>%s</b>" % (text, eval(text)))
  36.             print "%s" %(text)
  37.         except:
  38.             self.toText.append("<font color=red>%s is invalid!</font>" % text)
  39.             
  40.     def hex2dec(self):
  41.         try:
  42.             text = unicode(self.fromText.toPlainText())
  43.             dec = int(text,16)
  44.             self.toText.append("%s" % (dec))
  45.             print "%s" %(text)
  46.         except:
  47.             print "come to here"

  48.     def dec2hex(self):
  49.         try:
  50.             text = unicode(self.fromText.toPlainText())
  51.             print text
  52.             print "%s" %(text)
  53.             print eval(text)
  54.             print string.atoi(text)
  55.             #dat = hex(int(a,10))
  56.             dat = hex(eval(text))
  57.             print dat
  58.             self.toText.append("%s" %(dat))
  59.         except:
  60.             print "come to here"
  61.                     
  62. app = QApplication(sys.argv)
  63. form = Form()
  64. form.show()
  65. app.exec_()
复制代码

作者: gdmgb520    时间: 2013-09-26 13:17
本帖最后由 gdmgb520 于 2013-09-26 13:21 编辑

回复 2# 代号:军刀


    def dec2hex(self):
        try:
            text = unicode(self.fromText.toPlainText())
            print text
            print "%s" %(text)
            print eval(text)
            print string.atoi(text)
            #dat = hex(int(a,10))
            dat = hex(eval(text))
            print dat
            self.toText.append("%s" %(dat))
        except:
            print "come to here"

这个函数中就是  dat = hex(int(a,10)) 这里会出问题,及时我使用 dat = hex(eval(text)) 也不行
作者: conn2011    时间: 2013-09-26 15:52
from PyQt4.QtCore import *
别动不动就用这种导入方式!
QtCore里面有个函数就是hex,已经将内置函数给覆盖了,当然就会出错。回复 5# gdmgb520


   
作者: conn2011    时间: 2013-09-26 15:56
还有就是eval别滥用,你输个 self.close() 进去转换试试
作者: gdmgb520    时间: 2013-11-07 09:06
回复 8# conn2011


    谢谢!!!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2