Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 25, 2009 10:42:11

diam123
От:
Зарегистрирован: 2008-10-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Gui класс Tkinter

Здравствуйте, уважаемые, помогите разобраться со следующей проблемой:
Есть класс-работник, к нему я решил сделать ГУИ, так как с классами и с гуем работаю в первый раз, то навылазила куча вопросов, но я не знаю как решить один из них.
Все мы знаем, что при ГУИ написанном на Ткинтер , если к кнопке привязана команда, выполнение которой занимае время, происходит “Подвисание интерфейса”, для борьбы с этим я хочу сделать класс-прокладку, вопрос - как в классе ГУИ изменить атрибут кнопки из внешнего класса-прокладки.
Пример:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from Tkinter import Button
from Tkinter import Tk
import threading
import time

class Worker():
def work(self):
time.sleep(3)
return 100

class GUI_Processor(): #Типа класс для обработки команд с гуя

def button(self):
GUI.button["text"] = u"Делаем>>>"
GUI.button["text"] = Worker.work()
return

class GUI():

def button_action(self):#Насколько я понял, то придется для каждого действия писать такую обертку, хоть и некритично, но неудобно
threading.Thread(target=GUI_Processor.button).start()
return

def __init__(self):
self.MainWindow = Tk()
self.MainWindow.config(height=300, width=100)
self.button = Button(self.MainWindow, text=u"Сделать работу", command=self.button_action)
self.button.pack()
self.MainWindow.mainloop()

Worker = Worker()
GUI_Processor = GUI_Processor()
GUI()
Как такое сделать ??? Может и неправильно описал, но по другому не умею :(
П.С. Мое оформление кода, его прочитать то хоть можно ?



Отредактировано (Апрель 25, 2009 10:48:06)

Офлайн

#2 Апрель 25, 2009 12:33:11

diam123
От:
Зарегистрирован: 2008-10-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Gui класс Tkinter

Разобрался сам уже, немного переделал в такое :

#!/usr/bin/python
# -*- coding: utf-8 -*-

from Tkinter import Button
from Tkinter import Tk
import threading
import time
import copy

class Worker():
def work(self):
time.sleep(3)
return 100

class GUI_Processor():

def button(self):
GUI.button["text"] = u"Делаем>>>"
GUI.button["text"] = Worker.work()
return

class GUI():

def button_action(self):
threading.Thread(target=GUI_Processor.button).start()
return

def start(self):
self.MainWindow = Tk()
self.MainWindow.config(height=300, width=100)
self.button = Button(self.MainWindow, text=u"Сделать работу", command=self.button_action)
self.button.pack()
self.MainWindow.mainloop()

Worker=Worker()
GUI_Processor = GUI_Processor()
GUI=GUI()
GUI.start()
Работает именно так как я и хотел



Отредактировано (Апрель 25, 2009 12:33:37)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version