Включение matplotlib figure() приводит к путанице в Tkinter Checkbuttons()

#python #python-2.7 #matplotlib #tkinter

#python #python-2.7 #matplotlib #tkinter

Вопрос:

Я пишу графический интерфейс Tkinter, также используя matplotlib figures. Поскольку я переключился с дистрибутива Canopy Python 2.7 на установку Python 2.7, установленную вручную, я сталкиваюсь с проводными проблемами с Tkinter checkbuttons. Можно использовать кнопки, но переменная не установлена. Проблема появляется только тогда, когда я включаю matplotlib figure (см. Пример кода, 1-я строка в main()).

Win7-64

Рабочая установка: Enthought Canopy 1.7.4.3348, Python 2.7.11, matplotlib 2.0.0-8

Сейчас (не работает): Python 2.7.16, matplotlib 2.2.4

 import Tkinter as tk
import ttk as ttk
import matplotlib.pyplot as plt

class Application(tk.Frame):
    def __init__(self, gui_master):
        tk.Frame.__init__(self, gui_master)
        self.gui_master = gui_master
        self.frame = tk.Frame(self.gui_master)
        self.frame.grid()
        self.var = tk.IntVar()
        check_STD = ttk.Checkbutton(self.frame, variable= self.var, command = self.check_select)
        check_STD.grid(row = 1, column = 1)

    def check_select(self):
        print 'var', self.var, self.var.get()

def main():
    rp_fig, rp_ax = plt.subplots(1, 1, figsize = (9,9))
    gui_root = tk.Tk()
    gui_root.title("FXD-CSD-GUI")
    app = Application(gui_master=gui_root)
    gui_root.mainloop()
    plt.show()

main()
  

Комментарии:

1. использование rp_fig = plt.Figure(figsize=(9, 9)) rp_ax = rp_fig.add_subplot(111) этого работает, но я не понимаю, почему…

2. plt.show() блокирует выполнение любого дальнейшего кода. При использовании matplotlib.figure.Figure() вместо plt.figure() вы не используете pyplot, следовательно, у plt.show() него нет рисунка для отображения и, следовательно, он не будет блокироваться.