2013-05-24 36 views
7

bir 2 bayt Hex değerine bir tamsayı dönüştürme, bir I2C adresi belirlemek için '0x00' şeklinde bir Hex adresini okumalıdır.bir Tkinter GUI için Python

GUI başlatma:

Şu anda bunu yaparken am aşağıdaki şekilde kısmen kod görüldüğü gibi, gerçek bir Hex değer bu tam sayı dönüştürücü, bir tam sayıya dize dönüştürme, bir dizi olarak giriş okuyarak Sonra işlevi içinde
self.I2CAddress=StringVar() 
self.I2CAddress.set("0x00") #Sets Default value of '0x00' 
Label(frame, text="Address: ").grid(row=5, column=4) 
Entry(frame, textvariable=self.I2CAddress).grid(row=5, column=5) 

:

addr = self.I2CAddress.get() 
addrint = int(addr, 16) 
addrhex = hex(addrint) 

Bu en değerler için çalışır ama sorunum ben böyle '0x01' gibi küçük Hex değeri dize girerseniz, bu 1 doğru tamsayıya dönüştürür yani, ama sonra 0x01 yerine 0x1 Hex değerine dönüştürülür.

EE'miyim ve çok sınırlı programlama deneyimim var, bu nedenle her türlü yardım büyük beğeni topluyor.

cevap

13

Kullanım format() function:

format(addrint, '#04x') 

Bu uzunluk telafi etmek sıfır dolgulu 2 basamaklı onaltılık dize olarak giriş değeri biçimlendirir ve # bu durumda 'standart önek' 0x içerir. 4 genişliğinin bu öneki içerdiğini unutmayın. x, küçük harf altı altı dizeleri üretir; Büyük harf gerekiyorsa X kullanın.

Demo:

>>> for i in range(8, 12): 
...  print format(i, '#04x') 
... 
0x08 
0x09 
0x0a 
0x0b 
+0

teşekkür ederiz! Bir çekicilik gibi çalıştım, gerçekten çok memnun oldum –

+0

Bu kadar çabuk cevapladınız, bana izin vermeden önce birkaç dakika beklemeliyim, ama kesinlikle –

+0

olacaktır. Sadece "0x" yerine "{: # 02x}' ifadesini kullanabilirsiniz. '#', Hex numaraları '0x' olan" standart önek "ekleyecektir. (Bu,% -formatting ve C 'printf' ve POSIX komut satırı' printf' vb. Ile de aynı şekilde çalışır.) – abarnert