मैं एक प्रोग्राम बना रहा हूं जो एकाधिक पायथन फाइलों का उपयोग करता है। मुख्य फ़ाइल में, मैं GUI का रूट/कैनवास बनाता हूं। हालांकि, मुझे इस कैनवास को किसी अन्य पायथन फ़ाइल में संपादित करने में सक्षम होना चाहिए (इसमें जोड़ें, इसे साफ़ करें आदि)। क्या कोई और तरीका है इसे करने के लिए?

कोड का यह टुकड़ा मुख्य (menu.py) प्रोग्राम में है जिसमें GUI का कैनवास और रूट शामिल है। यह एक अन्य फ़ंक्शन (test()) को किसी अन्य पायथन फ़ाइल में कॉल करता है।

def Search_Book():
    from searchbooks import test
    test()

test फ़ंक्शन searchbooks.py फ़ाइल से संबंधित है। मुझे कैनवास को साफ़ करने के लिए इस फ़ंक्शन की आवश्यकता है जो मूल menu.py फ़ाइल में है। क्या कोई और तरीका है इसे करने के लिए? यदि नहीं, तो क्या मेरे कार्यक्रम को संरचित करने के वैकल्पिक तरीके हैं ताकि मैं वही लक्ष्य प्राप्त कर सकूं?

def test():
    canvas.delete("all")

कोड का यह टुकड़ा प्रदान करता है निम्न त्रुटि:

0
Culyer 4 पद 2019, 22:28

3 जवाब

सबसे बढ़िया उत्तर

आप किसी अन्य फ़ाइल से कैनवास तक पूरी तरह से पहुंच सकते हैं, लेकिन आपको सबसे पहले अपनी menu.py फ़ाइल को अपनी test.py फ़ाइल में आयात करना होगा। नीचे दिए गए कोड के लिए आपके पास menu.py फ़ाइल और test.py(test.py फ़ाइल है) की आवश्यकता है। जिसमें आपका टेस्ट () फंक्शन इन) फाइल उसी फोल्डर में है।

# This is in the test.py folder
import menu
def test():
  menu.canvas.delete("all")

या वैकल्पिक रूप से आप अपनी menu.py फ़ाइल के सभी गुणों को अपने test.py . में आयात कर सकते हैं

# This is in the test.py folder
from menu import *
def test():
  canvas.delete("all")

आशा है कि यह मददगार था।

0
RafD 4 पद 2019, 22:42

इसे मॉड्यूलर तरीके से करने का सामान्य तरीका यह है कि अपने सभी GUI को बाहरी मॉड्यूल में रखें और फिर इन सभी विधियों को मुख्य फ़ाइल में रखते हुए रूट या पैरेंट, विजेट और विधि के नाम पास करें। प्रक्रियात्मक या ऊप उदाहरण:

import your gui
import your GUI modules by name by sections etc.
def method1():
    print("My callback")
root=Tk()
a,b,c,d = layout(gui_root, Frame, Canvas, Button, Entry, method1)
# ANYTHING returned by layout a,b,c or d is what will go into the next section and so 
#on and you will need to return the callback method also.
root.mainloop()

यदि आप इस तरह से प्रयास करते हैं तो आप केवल अपनी विधि कॉलबैक को दोगुना कर देंगे क्योंकि विधियों को मुख्य लूप में रहना होगा जो केवल मुख्य ऐप फ़ाइल में मौजूद है। सभी वस्तुओं को लूप के बाहर रखा जा सकता है और जब तक उन्हें बुलाया नहीं जाता तब तक वे स्थिर रूप में मौजूद रह सकते हैं। लेकिन विधियाँ तब तक नहीं हो सकती जब तक कि आप प्रत्येक विधि के लिए दो विधियाँ नहीं बनाते, एक मुख्य में से एक को स्थैतिक में आरंभ करने के लिए।

0
rodeone2 4 पद 2019, 22:46

निम्नलिखित समाधान का प्रयास करें। यदि यह मुख्य नहीं है तो यह विज्ञान को चलने नहीं देगा।

if __name__ == "__main__":
print("main")
-1
RafD 4 पद 2019, 23:50