मैं कोड एक बटन का परीक्षण करना चाहता हूँ। हालाँकि इसने मुझे सिर्फ परिणाम दिया: प्रदर्शन DPMS के लिए सक्षम नहीं है। क्यों?

from tkinter import *
# tkinter

class Root(Tk):
  def __init__(self):
  # define self
    super(Root, self),__init__()
    self.title("Tkinter Button")
    # title of new window
    self.minsize(640,400)
    # size of button
    self.wm_iconbitmap('icon.ico')




    button = Button(self, text = "Click Me")
    # text on the button
    button.grid(column = 0, row = 0)
    # location in the new window opened

    root = Root()
    root.mainloop()
0
Brandon 17 अप्रैल 2020, 13:23

1 उत्तर

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

Display is not capable of DPMS कोई त्रुटि नहीं है, यह सिर्फ एक चेतावनी है, आपका कोड वैसे भी काम करेगा। यहां आपका वास्तविक मुद्दा यह है कि आप mainloopसही tk.Root में नहीं हैं।

आप शायद अनंत रिकर्सन में फंस गए हैं, क्योंकि आप Root ऑब्जेक्ट को Root ऑब्जेक्ट के प्रारंभ में प्रारंभ कर रहे हैं।

class Root(Tk):
    def __init__(self):
        super().__init__()

        # you are initializing another Root object here!
        root = Root()  
        # that will itself initialize another Root object,
        # and that will itself initialize another Root object, etc.

        root.mainloop()  # this statement will never be reached

आप वास्तव में जो चाहते हैं वह आपके द्वारा बनाई गई Root वस्तु के लिए mainloop को कॉल कर रहा है। __init__ विधि में, यह नव निर्मित वस्तु केवल self है। यह कोड आपकी अपेक्षा के अनुरूप काम करना चाहिए।

class Root(Tk):
    def __init__(self):
        super().__init__()

        self.title("Tkinter Button")
        self.minsize(640,400)
        self.wm_iconbitmap('icon.ico')

        button = Button(self, text = "Click Me")
        button.grid(column = 0, row = 0)

        self.mainloop()

ऑब्जेक्ट के बाहर से केवल mainloop चलाने पर भी विचार करें, आमतौर पर टिंकर के ऑब्जेक्ट इनिशियलाइज़ेशन में ऐसा करना अवांछनीय है

# remove self.mainloop() from Root.__init__ first
root = Root()
root.mainloop()  # better

super(Root, self),__init__() NameError Root
super(Root, self).__init__()

या बस, आधुनिक सिंटैक्स का उपयोग करके

super().__init__()
1
michaeldel 17 अप्रैल 2020, 10:45