Неожиданное поведение ссылки команды меню на функцию - PullRequest
1 голос
/ 23 ноября 2011

Ниже приведен скрипт Python для отображения меню (файл, опция), где опция используется для запуска функции conf. Как я и предполагал, conf fun запускается только при нажатии на соответствующий виджет меню. Это означает, что «ха-ха» будет напечатано, только когда я нажму «Option» / «Изменить список композиций», и «nana» будет напечатано только, когда я нажму «Option / Edit pvt list»

Однако, когда я запускаю скрипт top.py, 'haha' и 'nana' печатаются с самого начала. Это потому, что функция conf запускается два раза в начале. Это неожиданно. Пожалуйста, совет.

Ошибка, по-видимому, в следующих утверждениях:

menu_option.add_command (label = "Редактировать список компов", command = conf ('comp')) menu_option.add_command (label = "Редактировать список pvt", команда = conf ('pvt'))

Код: -

#File name :top.py
from Tkinter import *
import ttk

def conf(section):
    if section == 'comp':
        print 'haha'
    if section == 'pvt':
        print 'nana'
    pass

root = Tk()
root.title("NRUNTEST GUI VERSION 1")

menuframe = Frame(root)
menuframe.grid(column=0,row=0)
menuframe.columnconfigure(0,weight=1)
menuframe.rowconfigure(0,weight=1)

buttonh = ttk.Button(root, text='Quit',command=root.quit)
buttonh.grid(row=2, column=2, sticky=(E,W))

menubar = Menu(menuframe)
menu_file = Menu(menubar, tearoff=0)
menu_option = Menu(menubar, tearoff=0)
menubar.add_cascade(menu=menu_file, label='File')
menubar.add_cascade(menu=menu_option, label='Option')
**menu_option.add_command(label="Edit Comp List",command=conf('comp'))**
menu_option.add_separator()
**menu_option.add_command(label="Edit pvt List",command=conf('pvt'))**
menu_file.add_separator()

root.config(menu=menubar)


root.mainloop()

1 Ответ

3 голосов
/ 23 ноября 2011

Ваша ошибка довольно проста:

menu_option.add_command(label="Edit Comp List",command=conf('comp'))

Когда вы передаете этот аргумент:

command=conf('comp')

На самом деле вы его не передаете.Вы передаете результат из conf('comp') в качестве функции.Результатом этой функции является оператор print, который вы наблюдаете.

Попробуйте создать отдельные функции для каждого случая и добавьте команду следующим образом:

command=function_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...