Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 12, 2010 09:59:25

jerdeks
От:
Зарегистрирован: 2010-06-12
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Меню с Tk

Я хочу написать одну функцию для пунктов меню “Новый”, “Открыть” и т.д. в функцию должен передаваться int определяющий, какой пункт меню был выбран. Так, как сейчас, функция file_dialog зачем-то выполняется при запуске. Если потом нажимать “Открыть” ничего не происходит

from Tkinter import *
import tkMessageBox
class GuiMain(Tk):
def __init__(self):
Tk.__init__(self)
self.title(“TSP v 0.01”)
# Меню
menu_main = Menu(self)
self.config(menu = menu_main)
menu_file = Menu(menu_main)

menu_main.add_cascade(label = “Файл”, menu = menu_file)

menu_file.add_command(label = “Открыть”, command = self.file_dialog(1))
menu_file.add_command(label = “Сохранить”)
menu_file.add_command(label = “Сохранить как…”)
menu_file.add_separator()
menu_file.add_command(label = “Печать”)
menu_file.add_command(label = “Выход”)
#menu_main
self.c = Canvas(self, width = 400, height = 300, bg = “white”)
self.c.pack(fill = BOTH, expand = 1)

def file_dialog(self, n):
if n == 1:
tkMessageBox.showinfo(“1”, “1”)

gui_main = GuiMain()
gui_main.mainloop()



Отредактировано (Июнь 12, 2010 09:59:56)

Офлайн

#2 Июнь 12, 2010 10:56:42

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Меню с Tk

Так делать нельзя вызывайте функцию через lambda.



Офлайн

#3 Июнь 12, 2010 11:04:14

jerdeks
От:
Зарегистрирован: 2010-06-12
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Меню с Tk

вот так написал:

    file_dialog = lambda n:
if n == 1:
tkMessageBox.showinfo("1", "1")
file_dialog = lambda n:
^
SyntaxError: invalid syntax



Офлайн

#4 Июнь 12, 2010 12:23:01

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

Меню с Tk

О боже. Вы либо функцию пишите, либо лямбда функцию, но не мешайте одно с другим.
Почитайте литературу.

И пихаете вы это не туда куда надо.
Имелось ввиду lambda: self.file_dialog(1)



Офлайн

#5 Июнь 12, 2010 12:49:38

jerdeks
От:
Зарегистрирован: 2010-06-12
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Меню с Tk

ладно ругаться-то)) вот теперь работает!)) только почему так - непонятно. объясните пожалуйста



Офлайн

#6 Июнь 12, 2010 18:52:38

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

Меню с Tk

Что принимает command?
Что делает лямбда?
Почему не работало раньше?
Ответы на эти и другие вопросы вы найдёте в литературе по питону, а также “Tkinter reference: a GUI
for Python”.



Офлайн

#7 Июнь 12, 2010 20:34:08

jerdeks
От:
Зарегистрирован: 2010-06-12
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Меню с Tk

ну да, форумы для того, чтобы старожилы гордились перед новичками сделаны. а вовсе не для того, чтобы помогать друг другу решать какие-то вопросы, которые искать в манах долго и скучно
сорри за офтоп.
*ушел курить маны*



Отредактировано (Июнь 12, 2010 20:34:44)

Офлайн

#8 Июнь 13, 2010 00:44:36

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

Меню с Tk

Нет. Форумы для того что бы давать ответы на тонкие вопросы, давать направление, но не для того чтобы разъяснять всем азы.
Я потратил всего два дня на чтение литературы по питону. Другие языки знаю постольку поскольку.
Если тебе лень читать маны, то почему другим должно быть не лень читать их за тебя?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version