Форум сайта python.su
0
Продолжу задавать глупые вопросы.
Посмотрел и прочитал информацию. Там везде применяют один пример, как будто кто то один его написал а остальные скопировали.
Поясните мне
from tkinter import * from tkinter import messagebox class low(): U=0.4 print(U) def w(): w=0.4*5 print(w) class hi(): U=10 print(U) def a(): w=U print(w) root = Tk() root.geometry('150x150+0+0') root.title('') btn1 = Button(root, text="", font=("Ubunte", 10), command = low.w) btn1.grid(row=1, column=0, sticky="ew") btn2 = Button(root, text="", font=("Ubunte", 10), command = hi.a) btn2.grid(row=1, column=1, sticky="ew") root.mainloop()
Офлайн
white1. Как вариант, можно сделать статический метод:
Суть такая:
1. как передать значение U из класcа hi в функцию a? global U мне не нравится?
2. При запуске программы командная строка пишет 0,4 10 это показывает что выполняется класс low потом hi и только потом появляется окно. Так вот, можно как нибудь уйти от этого?
@staticmethod def a(): w = hi.U print(w)
Офлайн
0
Egorro13А если в классе две или больше функции, как передать данные из одной функции в другую внутри одного класса?
1. Как вариант, можно сделать статический метод:
Офлайн
whiteОбычно для таких целей используются поля объекта/класса, или можно передавать значения в параметрах функций/методов
А если в классе две или больше функции, как передать данные из одной функции в другую внутри одного класса?
Офлайн
0
class MyClass: def __init__(self,x,y,z): self.x=x self.y=y self.z=z def calc_method(self): return (self.x + self.y/self.z) def printing_calc_result(self): print (self.calc_method() ) root = MyClass(150,60,40) root.printing_calc_result()
Офлайн
73
whiteможет дело в отступах?
почему не запускается?
class MyClass: def __init__(self,x,y,z): self.x=x self.y=y self.z=z def calc_method(self): return (self.x + self.y/self.z) def printing_calc_result(self): print (self.calc_method() ) root = MyClass(150,60,40) root.printing_calc_result()
Офлайн
0
class MyClass: def __init__(self,x,y,z): self.x=x self.y=y self.z=z def calc_method(self): return (self.x + self.y/self.z) def printing_calc_result(self): print (self.calc_method() ) root = MyClass(150,60,40) root.printing_calc_result()
Отредактировано white (Апрель 28, 2019 09:54:40)
Офлайн
printing_calc_result() - метод, объявленный в классе MyClass, root - переменная этого класса. self - объект (переменная класса), у которой метод класса вызван, в случае root.printing_calc_result() self будет ссылаться на root
Офлайн
0
Ок, и последнее что хочу узнать на сегодня). (и так есть над чем подумать)
Мой странный ум говорит что должно работать:
from tkinter import * def low(): root = low(1,2,3,4) class low: def __init__(self,x,y,z,f): self.f=f self.x=x self.y=y self.z=z def calc_method(self): return (self.x + self.y/self.z+self.f) def printing_calc_result(self): print (self.calc_method() ) def hi(): root = hi(5,6,7,8) class hi: def __init__(self,x,y,z,f): self.f=f self.x=x self.y=y self.z=z def calc_method(self): return (self.x + self.y/self.z+self.f) def printing_calc_result(self): print (self.calc_method() ) root = Tk() root.geometry('150x150+0+0') #размер окна и координаты btn1 = Button(root, text="1", font=("Ubunte", 10), command=low) btn1.grid(row=0, column=0, sticky="ew") btn2 = Button(root, text="2", font=("Ubunte", 10), command=hi) btn2.grid(row=1, column=0, sticky="ew") root.mainloop()
Офлайн
white
Создаем окно, 2 кнопки 1 и 2. при нажатие на 1 уходит на функцию low. там мы грубо говоря скопировали часть кода с верху. И перестало работать.
def low(): # объявление метода low() root = low(1, 2, 3, 4) # объявление переменной root, присвоение ей # ссылки на новый объект ЕЩЕ НЕ ОБЪЯВЛЕННОГО класса low. class low: # объявление вложенного класса low, методы класса # сами по себе ничего не делают - для этого их надо вызывать.
Отредактировано Egorro13 (Апрель 28, 2019 10:45:51)
Офлайн