Форум сайта python.su
tkinter
Основная программа проверяет первый вход в саму себя модулем from moduls import firstEnter В ней форма ввода на холсте.
1)Создаю холст, на нем поле ввода, и обрабатываю событие <Return>
2)По нажатию Интер уничтожаю холст и продолжаю работать в этом же окне.
3)Но все что находится дальше по коду после модуля from moduls import firstEnter - выполняется сразу же.
4)Пробовал зациклить выполнение while. While крутится пока не будет нажат Интер (в событие добавлено изменение значения (mainS.stop+=1)) и прога пошла дальше работать… но при таком раскладе Интер я нажать не могу, так как from moduls import firstEnter просто игнорируется и не исполняется вообще.
Как сделать так что бы основная программа ни чего не делала после from moduls import firstEnter, пока модуль не будет исполнен?
Понять не могу, если от меня ждут ввода данных в форму то какого лешего прога прет дальше. или форма(похоже не только форма) исполняется как прерывание в ассемблере ?
Вообщем есть какая то функция которая тормозит прогу но приняв значение продолжает ее выполнение ?
from moduls import mainSettings from moduls import createDB mainS=mainSettings cDB=createDB.createDBcanvas stop=mainS.stop # stop=0 from moduls import firstEnter ''' while mainS.stop == 0: if mainS.stop == 1: break continue ''' print('go') mainS.mainloop()
Отредактировано vito-Z80 (Май 8, 2016 01:12:07)
Офлайн
..или как сделать:
создал фрейм или прямоугольник на холсте, и пока не уничтожить фрейм, прямоугольник или холст, не давать программе работать дальше ?
Вообщем не хочу делать кучу окон в приложении, то есть вместо дополнительных окон просто создавать холсты с кнопками (как бы окно, но overrideredirect(1), что бы не было заголовка окна и кнопок fullScreen/свернуть/закрыть), так я могу закрывать содержимое главного окна верхним холстом/окном.
можно и overrideredirect(1), но не знаю как сделать такое окно всегда поверх главного окна, но не поверх всех окон(сторонних приложений) и почему то при попытке свернуть overrideredirect(1) собственной кнопкой что то не то происходит - хотя мне это не надо)
Отредактировано vito-Z80 (Май 8, 2016 02:09:39)
Офлайн
vito-Z80Модуль не должен исполняться. В каждом модуле должна быть своя область с
Как сделать так что бы основная программа ни чего не делала после from moduls import firstEnter, пока модуль не будет исполнен?
if __name__ == '__main__': код
def main(): код if __name__ == '__main__': main()
Отредактировано py.user.next (Май 8, 2016 03:22:34)
Офлайн
py.user.nextу меня есть модуль с глобальными переменными, его тоже обязательно вгонять в функцию ?
from moduls import mainSettings mainS=mainSettings if mainS.os.path.exists('title'): file=open('title/title.txt','r') title=file.readline() mainS.root.title(title) else: from moduls import createDB cDB=createDB.createDBcanvas(wCreateDb=900,hCreateDb=100) cDB.leftText(text='Введите название:') cDB.rightEntry() cDB.entryTitle.bind("<Return>",lambda event:cDB.saveTitle())
Отредактировано vito-Z80 (Май 8, 2016 03:45:23)
Офлайн
vito-Z80Не, переменные и классы остаются.
у меня есть модуль с глобальными переменными, его тоже обязательно вгонять в функцию ?
vito-Z80Не, проверка __main__ делается для того, чтобы при непосредственном запуске запустился код, а при импортировании ничего не запускалось, только определения выполнились.
Проверка if - это же для того что бы проверить модуль модуль при его непосредственном запуске
vito-Z80У тебя сначала должно всё импортироваться, настроиться там всё, что надо, а потом в конце должен запуститься mainloop(). Если у тебя в каждом модуле будет свой mainloop(), то они все будут запускаться при импортировании. Чтобы этого не было, их нужно прятать за воротами с __main__.
Может как то mainloop() можно притормаживать или использовать многократно?
Отредактировано py.user.next (Май 8, 2016 04:18:16)
Офлайн
py.user.nextне силен в сленге, хотя если и догадался то все равно не пойму как это сделать
Чтобы этого не было, их нужно прятать за воротами с __main__.
Отредактировано vito-Z80 (Май 8, 2016 06:48:18)
Офлайн
vito-Z80Каждый файл .py является модулем. Программа состоит из модулей. В каждом файле должны быть только объявления.
Модуль обязан быть автономным ?
vito-Z80Не, я так понял, ты вместо функций используешь модули.
короче я так понимаю что бы мою идею реализовать нужно сразу создать кучу холстов disabled и по событиям активировать те которые нужны, так?
#!/usr/bin/env python3 import tkinter class Window(tkinter.Frame): def __init__(self, master, title): tkinter.Frame.__init__(self, master) self.master = master self.master.title(title) self.master.geometry('200x100+400+400') def main(): top = tkinter.Tk() w = Window(top, 'My Window') top.mainloop() if __name__ == '__main__': main()
Отредактировано py.user.next (Май 8, 2016 07:30:36)
Офлайн
Может это поможет.
vito-Z80Любая функция тормозит прогу до тех пор пока не выполнится (собственно она и есть прога).
есть какая то функция которая тормозит прогу
vito-Z80
Как сделать так что бы основная программа ни чего не делала после from moduls import firstEnter, пока модуль не будет исполнен?
import Check
from Check import Check_function Check_function()
Офлайн
py.user.nextВот честно даже понять не могу ваш код.
doza_andну вызову я функцию, вызову за ней следующую + еще 5 штук, и все они выполнятся сразу, в моем случае отрисуются 7 холстов Canvas одни над другим, мне же их нужно вызывать в порядке работы с ними.
Отредактировано vito-Z80 (Май 8, 2016 16:00:19)
Офлайн
vito-Z80Просто элементарных знаний нет. Нельзя методом тыка изучать язык. Это можно только тогда, когда ты уже владеешь подобным языком.
Вот честно даже понять не могу ваш код.
vito-Z80Это инициализатор. Через него задаются начальные настройки экземпляра класса.
def __init__ это конструктор - он выполняется когда обращаются к классу.
vito-Z80Класс Window - это самодельный класс. Его можно менять, как угодно. Но наследуется он от встроенного в tkinter класса, поэтому заранее обладает всеми свойствами наследуемого классса.
class Window(tkinter.Frame): так понял класс tkinter`а, только зачем это сделано ума не приложу.
vito-Z80Так как базовый класс также требует инициализации, в экземпляре нужно обратиться к унаследованной части и провести инициализацию.
tkinter.Frame.__init__(self, master) - вообще не понял.
vito-Z80Ну, вот ты познавал методом тыка, и допознавался до запуска модулей, тогда как модули используются в основном только для импортирования.
ну или как всегда методом проб и ошибок придется все познавать
Отредактировано py.user.next (Май 8, 2016 17:11:49)
Офлайн