Несколько операций с одной кнопки tkinter

Я пишу программу для графического интерфейса, использующего matplotlib и tkinter. Для некоторых параметров я добавил окно верхнего уровня. Я хочу выполнить функцию и выйти из окна верхнего уровня после нажатия кнопки. Это возможно?


Проблема, с которой я сталкиваюсь, заключается в том, что я использовал окно верхнего уровня, которое нужно вызывать из главного окна. SO Я определил функцию, которая содержит это окно верхнего уровня. Если я определяю другую функцию, которая может выполнять несколько операций, она не может распознать окно верхнего уровня. Я мог бы определить все это под классом, но не уверен, работает ли он. Вот часть моего кода, содержащего окно верхнего уровня.

  • Python argparse: Есть ли способ указать диапазон в nargs?
  • Разница между del, удаление и поп в списках
  • Некоторые теги mutagen не работают
  • Разбиение строки на несколько строк в соответствии с шириной символа (python)
  • Вызов запроса из базы данных Access: «невозможно преобразовать строку в float: E + 6»
  • Вызовите функцию python с помощью HTML
  • def plt_options(arg): global lg_var,col_var,line_type_var,marker_var plt_opt = Toplevel(app) lg_var = StringVar(None) lg_text = Label(plt_opt,text='Legend').grid(row=0,column=0,sticky=E) lg_box = Entry(plt_opt,textvar=lg_var) lg_box.grid(row=0,column=1,sticky=W) col_var = StringVar(None) col_var.set('blue') col_text = Label(plt_opt,text='Color').grid(row=1,column=0) col_chooser = OptionMenu(plt_opt,col_var,'blue','green','red','cyan',\ 'magneta','yellow','black','white') col_chooser.grid(row=1,column=1) line_type_var = StringVar(None) line_type_var.set('Solid') line_type_text = Label(plt_opt,text='Line type').grid(row=2,column=0) line_chooser = OptionMenu(plt_opt,line_type_var,'Solid','Dashed',\ 'Dotted','Dash-Dotted','None') line_chooser.grid(row=2,column=1) marker_var = StringVar(None) marker_var.set('None') marker_text = Label(plt_opt,text='Marker').grid(row=3,column=0) marker_chooser = OptionMenu(plt_opt,marker_var,'Plus','Dot','Circle',\ 'Star','Pentagon','Square','Cross','Diamond','Hexagon','Triangle') marker_chooser.grid(row=3,column=1) ok_btn = Button(plt_opt,text='OK',command=testing).grid() 

  • Результат результата sklearn standardcaler отличается от результата вручную
  • Сохранять координаты кликов мыши с помощью matplotlib
  • Основы рекурсии в Python
  • Файлы Python - импорт из друг друга
  • Не удается настроить pyQt
  • Сохранение интерактивных рисунков Matplotlib
  • 2 Solutions collect form web for “Несколько операций с одной кнопки tkinter”

    Кнопки предназначены именно для этого. Как правило, вы определяете функцию или метод, которые делают все, что хотите, а затем присваиваете этот метод атрибуту команды кнопки:

     import Tkinter as tk import tkMessageBox class SampleApp(tk.Tk): def __init__(self): tk.Tk.__init__(self) button = tk.Button(text="Press me!", command=self.on_button) button.pack() def on_button(self): tkMessageBox.showinfo(message="Good-bye!") self.destroy() app = SampleApp() app.mainloop() 

    Параметр command кнопки позволяет указать объект / метод / вызываемый объект, который будет вызываться при нажатии кнопки.

     from Tkinter import * def buttonClicked(event): do_a_thing() do_another_thing() do_a_third_thing() #etc root = Tk() myButton = Button(root, text="Do Some Things", command=buttonClicked) myButton.pack() root.mainloop() 

    Вы можете выйти из окна, вызвав его метод destroy .

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

     from Tkinter import * def makeMyWindow(): root = Tk() def buttonClicked(): print "Reticulating Splines..." print "Done. Goodbye!" #we can access root since we're inside the right scope, #even if this function gets passed somewhere else as a callback root.destroy() myButton = Button(root, text="Do Some Things", command=buttonClicked) myButton.pack() root.mainloop() makeMyWindow() 
    Python - лучший язык программирования в мире.