मैं OOP के साथ बहुत सारे लेबल और बटन के साथ एक प्रोग्राम बनाने जा रहा हूँ। मान लें कि मैं जिस प्रोग्राम को बनाना चाहता हूं वह इस तरह दिखता है:

p1 = Label(root, bg='lightblue')
p1.place(relwidth=1, relheight=0.5)
p1 = Button(root, text= 'test')
p1.place(x= 0, y= 0)

p2 = Label(root, bg='red')
p2.place(y=200, relwidth=1, relheight=0.5)
p2 = Button(root, text= 'test 2')
p2.place(x= 0, y= 200)

जब मैं p3, p4, p5, वगैरह बनाऊंगा तो इसे और अधिक कुशल बनाने के लिए मैंने निम्नलिखित लिखा:

from tkinter import *

root = Tk()
canvas = Canvas(height=400, width=400)
canvas.pack()

class Display:
    def __init__(self, root, x, y, bg, relwidth, relheight, text):
        self.root = root
        self.x = x
        self.y = y
        self.bg = bg
        self.relwidth = relwidth
        self.relheight = relheight
        self.text = text

    def DisplayLabel(self):
        Label(self.root, self.bg).pack(self.relwidth, self.relheight)

    def DisplayButton(self):
        Button(self.root, self.text).pack(self.x, self.y)


p1 = Display(root, 0, 0, 'lightblue', 1, 0.5, 'test')
p2 = Display(root, 0, 200, 'red', 1, 0.5, 'test 2')

p1.DisplayLabel()
p1.DisplayButton()
p2.DisplayLabel()
p2.DisplayButton()

root.resizable(False, False)
root.mainloop()

विचार यह है कि प्रत्येक लेबल और बटन को बार-बार लिखने के बजाय मैं केवल उन मानों को लिखता हूं जो मुझे p1 और p2 में पसंद हैं। कोड ज्यादातर अपेक्षित काम करता है और मैं पी 1 और पी 2 के अलग-अलग मूल्यों को मुद्रित करने में सक्षम हूं। लेकिन जब मैं प्रोग्राम में लेबल और बटन प्रदर्शित करने का प्रयास करता हूं तो सब कुछ गलत हो जाता है। जब मैं इस भाग को आजमाता हूं:

p1.DisplayLabel()
p1.DisplayButton()
p2.DisplayLabel()
p2.DisplayButton()

यह मुझे निम्न त्रुटि देता है:

Traceback (most recent call last):
File "C:\Users\Daniel\PycharmProjects\stockalarm\test.py", line 36, in <module>
p1.DisplayLabel()
File "C:\Users\Daniel\PycharmProjects\stockalarm\test.py", line 27, in DisplayLabel
Label(self.root, self.bg).pack(self.relwidth, self.relheight)
File "C:\Users\Daniel\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 3144, in __init__
Widget.__init__(self, master, 'label', cnf, kw)
File "C:\Users\Daniel\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 2565, in __init__
classes = [(k, v) for k, v in cnf.items() if isinstance(k, type)]
AttributeError: 'str' object has no attribute 'items'

मैं क्या गलत कर रहा हूं? मैं प्रोग्राम में बटन और लेबल कैसे प्रदर्शित करूं?

0
Daniel 16 फरवरी 2021, 23:23

1 उत्तर

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

आप यह निर्दिष्ट करना भूल गए हैं कि आपके तर्कों को कौन से पैरामीटर सेट करना है, जैसे आपने कोड के अपने पहले स्निपेट में किया था:

p1 = Label(root, bg='lightblue')
p1.place(relwidth=1, relheight=0.5)

दूसरे स्निपेट में, हालांकि, आप बिना किसी विनिर्देश के वेरिएबल्स को वहां डालते हैं:

Label(self.root, self.bg).pack(self.relwidth, self.relheight)
...
Button(self.root, self.text).pack(self.x, self.y)

यह होना चाहिए:

Label(self.root, bg = self.bg).place(relwidth = self.relwidth, relheight = self.relheight)
...
Button(self.root, text = self.text).place(x = self.x, y = self.y)

आपने गलती से place की जगह pack भी लिख दिया।

0
kippel 16 फरवरी 2021, 23:49