Найти - Пользователи
Полная версия: Создание своего модуля для Python
Начало » GUI » Создание своего модуля для Python
1
Jeka_KOzolup1
Здравствуйте! Хочу создать свой модуль для Python с использованием Tkinter. Это будет модуль для обучения детей програмирыванию. Но есть проблема! Только начал учить ООП, вот код:
 from tkinter import *
 
class Butterfly:
     def __init__(self, width=500, height=500, size=100):
          self.width=width
          self.height=height
          self.size=size
          self.canv=Canvas(root, width=self.width, height=self.height)
          self.canv.pack()
          self.x1=self.width/2-self.size/2
          self.y1=self.height/2-self.size/2
          self.x2=self.width/2+self.size/2
          self.y2=self.height/2+self.size/2
          self.canv.create_polygon(self.x1, self.y1, self.x2, self.y2, self.x2, self.y1, self.x1, self.y2,
                                     tag="butterfly", fill="light grey", outline="black", width=1)
     def move_right(self, key):
          self.canv.move("butterfly", key, 0)
вот создал новый файл подключил модуль и уже ввел несколько строк:
 from butterfly import *
butt=Butterfly(400, 400, 50)
butt.move_right(200)
Суть в том, что в самом модуле все работает, а в новом файле выбиваеться исключение:
 Traceback (most recent call last):
  File "/media/yevhenii/8E24F95024F93BB1/Users/Yevhenii-PC-Windows/Desktop/butterfly.py", line 24, in <module>
    butt.move_right(200)
  File "/media/yevhenii/8E24F95024F93BB1/Users/Yevhenii-PC-Windows/Desktop/butterfly.py", line 20, in move_right
    self.canv.move("butterfly", key, 0)
  File "/usr/lib/python3.5/tkinter/__init__.py", line 2434, in move
    self.tk.call((self._w, 'move') + args)
_tkinter.TclError: invalid command name ".3070977548"
что делать?
PEHDOM
 class Butterfly:
     def __init__(self, width=500, height=500, size=100):
      .....
          self.canv=Canvas(root, width=self.width, height=self.height)
     .....
что такое root? судя по всему вы его никак не передаете внутрь класса, это глбальная переменная вашего модуля?
Вобще я понимаю что у вас чтото типа такого, как принято в учебниках по ТКИнтеру
 root = Tk()
но лучше всеже ссылку на родительский обьект передавать явно:
 сlass Butterfly:
     def __init__(self, root, width=500, height=500, size=100):
          ....
          self.canv=Canvas(root, width=self.width, height=self.height)
          ....

+ даже если вы в модуле выполнили from tkinter import *
в новом файле нужно всеравно импортировать его, хотя бы для создания объекта класса Tk, без которого у вас ничего не выйдет.
Вот так все работает с учетом правок класса Butterfly выше:
 from tkinter import *
from butterfly import *
root = Tk()
butt = Butterfly(root, 400, 400, 50)
butt.move_right(100)
root.mainloop()

JOHN_16
Как то странно что Вы собираетесь учить детей при этом сами только начали ООП …
Jeka_KOzolup1
PEHDOM
Спасибо большое!!! Вы настоящий учитель!
JOHN_16
На будущее, не смотря на то какой вы профессионал, надо быть скромным и компетентным. Я задал вопрос, а не просил высказать мнение про мои способности учителя)
FishHook
Jeka_KOzolup1
На будущее, не смотря на то какой вы профессионал, надо быть скромным и компетентным. Я задал вопрос, а не просил высказать мнение про мои способности учителя)

Уважаемый господин Козолуп! Не смотря на то, что вы не просили меня высказывать свое мнение, я его выскажу (вот так несправедливо устроен этот мир - мы не всегда получаем то, чего хотим). Вы совершенно правы, профессионал должен быть компетентным! С вашим утверждением спорить невозможно, оно аксиоматично. Разумеется, все мы пользователи чьих-то услуг и хотим, чтобы нас лечили, судили, консультировали и кормили компетентные профессионалы. И вне всяких сомнений каждому хочется, чтобы его детей учили компетентные преподаватели. Вы просите не обсуждать ваши способности учителя, но ведь вас никто не просил рассказывать широкой общественности о том, что вы преподаватель. Вы сами гордо и громко об этом заявили, видимо, вы гордитесь своей профессией и уж точно считаете себя компетентным профессионалом. К сожалению, назвать вас профессионалом и тем более компетентным совершенно невозможно. Более того, вы создаете впечатление школьника класса шестого, который решил разыграть товарища и звонит ему писклявым голоском представляясь учителем Василием Петровичем. Всем кроме самого школьника очевидно, что на голос Василия Петровича юное сопрано совсем не похоже. Я не знаю, зачем вам понадобилось называться учителем, но настойчиво советую прекратить комедию.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB