1

Тема: Допоможіть з класами

Маємо для прикладу такий код мовою Python:

from tkinter import *

class Space():
    def __init__(self):
        object=Tk()
                object=Canvas(root, bg="green")
        object.pack()
        object.mainloop()
class Line():
    def __init__(self, space):
        space.create_line(x, y, x1,y1)

root=Space()
canv=Line(root)

Суть в тому, що я хочу повторити прийом з Tk() і Canvas() класами. Тільки трішки переробити під своє завдання.
Тобто спочатку потрібно створити простір для побудови об'єкта (це буде не просто лінія, а малюнок), а потім створюється сам об'єкт, але потрібно вказати в якому вікні та канвасі він буде зображається, ну і потім там будуть різноманітні методи і тому подібне. Допоможіть будь-ласка, дуже потрібно. Та не судіть строго я тільки початківець.

Подякували: 0xDADA11C71

2 Востаннє редагувалося koala (07.11.2017 09:25:58)

Re: Допоможіть з класами

0. У рядку 5 мало бути root=Tk()?
1. Ви не зберігаєте об'єкти. Якщо вам потрібно, щоб об'єкт класу Space мав елементи root (класу Tk), object (класу Canvas) і ще якісь, то треба звертатися через self:

...def __init__(self):
        self.root = Tk()
...
root = Space()
root.root #ось той Tk(), що його створили в __init__

2. Ви неправильно розумієте mainloop. У подіє-орієнтованих програмах є основний цикл, який обробляє поточні події (натискання кнопок, рух миші і т.д.), після чого лягає спати, на кшталт

while True:
   if список_подій:
      обробити_подію(список_подій[0]) #тут все складніше, наприклад, подія "натиснений хрестик у кутку" викличе break
   сказати_системі_не_чіпати_поки_нема_подій()

звісно, є купа деталей про те, як обробляти подію, як спати (може, вказувати деякий час і перевіряти, чи нема нових подій, а може, у системи є функція очікування). Щоб не морочити голову програміста цими деталями, цей цикл запханий у функцію Tk.mainloop. Відповідно, поки виконується mainloop - код далі не працюватиме, це цикл до закриття програми! Працюватимуть лише обробники подій.

Подякували: 0xDADA11C7, leofun01, ykozolup3