दिलचस्प पोस्ट
कैसे वेब अनुप्रयोग में गुण फ़ाइल को पढ़ने के लिए? कम्पाइलर बिना एक सदिश में एक स्केलर को मर्ज करने के लिए ऊपरी तत्वों को गोद देने के लिए एक अनुदेश को बर्बाद करने के लिए कैसे? इंटेल के इंट्रिरिंस में डिजाइन सीमा? कैसे मैं Unescape और Reescape स्ट्रिंग को नेट में कर सकता हूं? PostgreSQL में प्रविष्टि प्रदर्शन को गति कैसे करें Mockito: एक विधि के भीतर बनाई गई वस्तु पर विधि को कैसे सत्यापित किया गया था? ImageView में छवि फ़िट करें, आकृति अनुपात रखें और फिर छवि आयाम के लिए ImageView का आकार बदलें? कैसे मैन्युअल रूप से icutil का उपयोग कर आईसीएनएस फाइलें बनाने के लिए? Printf परिवार का उपयोग करके size_t variable को कैसे प्रिंट किया जा सकता है? मैं स्ट्रिंग के अंत से एक अल्पविराम को कैसे निकालूं? jQuery के DatePicker – मक्खी पर मिनट और maxDate बदल रहा है अजगर का उपयोग करके चित्र से रंगीन आकृतियों की संख्या ढूंढना अजीब एमएससी 8.0 त्रुटि: "ईएसपी का मान फ़ंक्शन कॉल में ठीक से नहीं बचा था …" स्माक का उपयोग करते हुए एक्सएमपीपी ओपन फ़ायर में टंकण स्थिति जानने के लिए एंड्रॉइड: 2 एमबी फ्री हीप के साथ 400KB फ़ाइल के साथ मेमोरी के बाहर बिटमैपफ़ीन्टर। एकोडस्ट्रीम () जावा टीसीपी सॉकेट: डेटा ट्रांसफर धीमा है

टंकिनर लूप और सीरियल लिखना

मैंने टंकिनर का इस्तेमाल करते हुए एक गुई लिखी है और मुझे वास्तविकता में 2 स्केल के मूल्यों को एक अरडिनो में भेजना होगा। मैंने यह सत्यापित किया है कि arduino एक और स्केच का उपयोग कर रहा है जो arduino को मान भेजता है और ये प्राप्त होते हैं, मैंने निम्नलिखित कोड में मेरे अजगर कोड में जोड़ दिया है

while True: #command = raw_input("Enter level ") #if command == '1' : ser.write("c"+str (c1v.get())) ser.write(":d"+str (c2v.get())) 

मैंने इसे टंकिनर मेनलोूप के अंदर और बाहर स्थानांतरित कर दिया है और गुइ से अलग-अलग परिणाम प्राप्त किए हैं, केवल गुइ बंद होने के बाद ही डेटा को लोड नहीं किया जा सकता है। क्या कोई मुझे बता सकता है कि कैसे गुई को चलाने के लिए और जैसा कि मैंने एक पैमाने पर कदम रखा है वह मान अरंडिन को वास्तविक समय में सीरियल पर भेजा जाता है।

कोड को हार्स करता है:

 from Tkinter import * import serial ser = serial.Serial('/dev/ttyAMA0', 9600) master= Tk() master.geometry('500x500+0+0') def print_value(val): print ("c1="+str (c1v.get())) print ("c2="+str(c2v.get())) c1v=DoubleVar() c2v=DoubleVar() c1 = Scale(master, from_=255, to=0, length =400,width =100, troughcolor = 'blue',command=print_value, variable =c1v) c1.grid(row=1,column=1) c2 = Scale(master, from_=255, to=0, length =400,width =100, troughcolor = 'blue',command=print_value, variable =c2v) c2.grid(row=1,column=2) def load_p1(): pass lp1 = open("/home/pi/Desktop/IEP/test/preset_test.txt") val1, val2 = (x.split("=")[1] for x in lp1) c1.set(val1) c2.set(val2) lp1.close() # def record(): save_path = '/home/pi/Desktop/IEP/test' name_of_file = ("preset_test") completeName = os.path.join(save_path, name_of_file+".txt") file1 = open(completeName , "w") toFile = ("c1="+str (c1.get())+ "\n""c2="+str(c2.get())) file1.write(toFile) file1.close() rec=Button(master, text="Record",width=20, height=10, bg='Red', command=record) rec.grid(row=2, column=1) load=Button(master, text="Load",width=20, height=10, bg='gold',command=load_p1) load.grid(row=2, column=2) master.mainloop() while True: #command = raw_input("Enter level ") #if command == '1' : ser.write("c"+str (c1v.get())) ser.write(":d"+str (c2v.get())) 

Solutions Collecting From Web of "टंकिनर लूप और सीरियल लिखना"

प्रसंग

आप टंकिनर मेनलोूप और कुछ while लिए -लोूप का उपयोग करते हैं और अब आप दोनों प्रोग्राम को एक प्रोग्राम में रखना चाहते हैं।

 while X: do_y() 

तथा

 master.mainloop() 

समाधान की

आपके लिए कई समाधान हैं

  1. पाश को विभाजित करें और जीयूआई आपको वापस कॉल करने के after उपयोग करें:

     def do_y2(): do_y() if X: master.after(123, do_y2) # after 123 milli seconds this is called again do_y2() master.mainloop() 

    अधिक विस्तृत उत्तर के लिए ब्रायन ओकले द्वारा यह जवाब देखें

  2. मेरे द्वारा गिलओप का उपयोग करें

     from guiLoop import guiLoop # https://gist.github.com/niccokunzmann/8673951#file-guiloop-py @guiLoop def do_y2(): while X: do_y() yield 0.123 # give the GUI 123 milli seconds to do everything do_y2(master) master.mainloop() 

    GUILoop 1 से दृष्टिकोण का उपयोग करता है। लेकिन आपको लूप के दौरान एक या एक का उपयोग करने की सुविधा मिलती है।

  3. जीयूआई ताज़ा करने के लिए update का उपयोग update

     while X: do_y() master.update() 

    यह दृष्टिकोण एक असामान्य है क्योंकि चूंकि यह मेनलूप को बदलता है जो कि सबसे अधिक GUI फ़्रेमवर्क जैसे टस्किनर है ध्यान दें कि 1 और 2 के साथ आप एक से अधिक लूप बना सकते हैं, केवल 3 में नहीं

  4. निष्पादन के एक नए थ्रेड का उपयोग करें जो आपके लूप को समानांतर में निष्पादित करता है। ! इस थ्रेड को मास्टर या किसी जीयूआई तत्वों को सीधे नहीं पहुँचना चाहिए क्योंकि टंकिनटर तो क्रैश कर सकता है!

     import threading def do_y_loop(): while X: do_y() thread = threading.Thread(target = do_y_loop) thread.deamon = True # use this if your application does not close. thread.start() master.mainloop() 
  5. एक नया थ्रेड में मेनलोूप शुरू करें 4 के रूप में। यदि आप थ्रेड से जीयूआई का उपयोग करते हैं तो टिनकिनेटर दुर्घटनाग्रस्त हो सकता है।

     import threading thread = threading.Thread(target = master.mainloop) thread.deamon = True # use this if your application does not close. thread.start() while X: do_y() 

    दोनों में 4. और 5. जीयूआई और समय-पाश के बीच संचार वैश्विक चर के माध्यम से जाना चाहिए, लेकिन कभी भी कंकनेवाला तरीकों के माध्यम से नहीं हो सकता।


PyQT के लिए ये प्रश्न देखें:

  • PyQt में पुश बटन का उपयोग करते हुए लूप के दौरान प्रोग्राम को कैसे छोड़ दिया जाए
  • PyQt में कीबोर्ड इंटरप्ट के लिए पुश-बटन कैसे सेट करें