2013-05-24 5 views
7

में एक 2 बाइट हेक्स मूल्य के लिए एक पूर्णांक कन्वर्ट एक tkinter जीयूआई के लिए, मैं '0x00' के रूप में एक हेक्स पते में पढ़ा एक I2C पता सेट करने चाहिए।अजगर

जीयूआई प्रारंभ:

तरह से मैं वर्तमान में यह कर रहा हूँ एक स्ट्रिंग के रूप इनपुट पढ़ने, एक पूर्णांक के लिए स्ट्रिंग परिवर्तित, तो एक वास्तविक हेक्स मान के लिए कि पूर्णांक परिवर्तित करने के रूप में नीचे आंशिक कोड में दिखाया गया है के द्वारा होता है
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) 

यह सबसे मूल्यों के लिए काम करता है, लेकिन मेरे मुद्दा यह है कि अगर मैं इस तरह के '0x01' के रूप में एक छोटे से हेक्स मूल्य स्ट्रिंग दर्ज, यह 1 के समुचित पूर्णांक में धर्मान्तरित है, लेकिन फिर 0x01 के बजाय 0x1 के हेक्स मान में परिवर्तित हो जाता है।

मैं एक ईई हूँ और बहुत ही सीमित प्रोग्रामिंग अनुभव है, इसलिए किसी भी मदद बहुत सराहना कर रहा है।

उत्तर

13

उपयोग format() function:

format(addrint, '#04x') 

यह अग्रणी शून्य के साथ एक 2 अंकों हेक्साडेसिमल स्ट्रिंग लंबाई बनाने के लिए के रूप में इनपुट मूल्य स्वरूपों, और # 'मानक उपसर्ग', 0x इस मामले में भी शामिल है। ध्यान दें कि 4 की चौड़ाई में उपसर्ग शामिल है। x लोअर केस हेक्स स्ट्रिंग का उत्पादन करता है; यदि आपको अपरकेस की आवश्यकता है तो X का उपयोग करें।

डेमो:

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

धन्यवाद! एक आकर्षण की तरह काम किया, मैं वास्तव में यह –

+0

आप इतनी जल्दी जवाब मैंने पहले यह मुझे अनुमति देता है कुछ मिनट तक प्रतीक्षा करने के लिए है की सराहना करते हैं, लेकिन मैं पूरी तरह से –

+0

तुम बस 'उपयोग कर सकते हैं {: # 02x} स्पष्ट' 0x' की 'बजाय। '#' "मानक उपसर्ग" है, जो हेक्स संख्या के लिए '0x' है जोड़ देगा। (यह भी% -formatting साथ उसी तरह काम करता है, और सी 'printf', और POSIX कमांड लाइन' printf', आदि) – abarnert