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

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


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

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() 

  • Как изменить цвет текстового курсора в Tkinter?
  • Tkinter: ProgressBar с неопределенной продолжительностью
  • Tkinter: установите StringVar после события <Key>, включая нажатую клавишу
  • Как изменить цвет кнопки ttk
  • Функция масштабирования не выводит число в переменную?
  • Как я могу идентифицировать кнопки, созданные в цикле?
  • Схема tkinter gui с использованием фреймов и сетки
  • Как остановить Tkinter Frame от сжатия до его содержимого?
  • 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() 
    Interesting Posts

    Выбор строк из NumPy ndarray

    Интроспекция вложенных (локальных) функций данной функции в Python

    Как я могу манипулировать битами в Python?

    Python: DISTINCT в наборе результатов GQuery (GQL, GAE)

    История интерактивного режима Python и клавиши со стрелками

    Эффективный способ чтения определенного номера строки файла. (БОНУС: Pizon Manual Misprint)

    Уменьшите пару «ключ-значение» в пару из списка ключей с помощью Apache Spark

    Как создать поле пароля в модели django

    Проблемы с Python Fizzbuzz с циклом

    Python: отображение локального часового пояса

    Как я могу частично отсортировать список Python?

    извлечение элемента и вставка пробела

    Есть ли простой способ избавиться от ненужных значений, которые появляются, когда вы используете SSH с помощью библиотеки Python в Paramiko и извлекаете вывод из CLI удаленной машины?

    Аппроксимация быстрых хавсинов (Python / Pandas)

    Функция print () Python 3 с символами фарси / арабский

    Python - лучший язык программирования в мире.