Текстовая переменная Tkinter не обновляется с помощью MatplotLib - PullRequest
0 голосов
/ 30 октября 2018

Может кто-нибудь помочь мне здесь? Текстовая переменная не обновляется, когда я добавляю строку:

f = plt.figure(0, figsize=(20,9))

Если я прокомментирую строку выше, то я вижу, что текстовая переменная обновляется в метке, но как только я раскомментирую строку, метка больше не обновляется. Кто-нибудь может мне помочь, пожалуйста?

from tkinter import *
from tkinter import ttk
from tkinter import StringVar

import matplotlib
import matplotlib.artist as artists
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure
import matplotlib.animation as animation

f = plt.figure(0, figsize=(20,9))

class make_window():

    def __init__(self, *args, **kwargs):

        self.win = Tk()
        self.win.title("Test")
        self.win.state("zoomed")

        Frame = ttk.Frame(self.win)
        Frame.pack()

        labelVar = StringVar()
        labelVar.set("Hi")
        self.LabelUpdate = Label(Frame, textvariable = labelVar)
        self.LabelUpdate.pack()


#################################################################################

window = make_window()
window.win.mainloop()

1 Ответ

0 голосов
/ 30 октября 2018

Я заметил несколько проблем, которые нужно решить.

Во-первых, способ импорта (from tkinter import *) вызовет проблемы, и фактически здесь, в этом случае, вы делаете вид ошибки, которой известен этот импорт. Позже в вашем коде вы делаете Frame = ttk.Frame(), и эта строка фактически переопределяет импорт Frame из from tkinter import *. Не называйте ваши переменные так же, как встроенные методы. Чтобы предотвратить такую ​​ошибку, вы можете просто сделать import tkinter as tk и всегда использовать префикс tk. для предотвращения переопределения в вашем коде.

Затем я заметил, что ваш ярлык упаковывается на экране, но не показывает какой-либо текст достаточно странно, но когда я закомментирую f = plt.figure(0, figsize=(20,9)) ярлык начинает работать как положено.

Так что здесь есть какое-то странное взаимодействие с matplotlib и этим ярлыком.

Когда я меняю f = plt.figure(0, figsize=(20,9)) на f = Figure(figsize=(20,9)), этикетка также снова работает.

Если Figure() не совсем то, что вы пытаетесь использовать здесь, пожалуйста, добавьте еще немного контекста в ваш код относительно того, что вы ожидаете сделать с f.

Обновление:

Я также заметил, что когда вы перемещаете f после self.win = tk.Tk(), код работает нормально. Мое единственное предположение относительно того, почему это происходит, возможно, так как у matplotlib есть собственный код tkinter. Так что, если вы попытаетесь создать plt.figure перед созданием экземпляра tkinter, то я представляю во внутреннем интерфейсе экземпляр tkinter, запускаемый matplotlib, и это вызывает странное поведение. Я могу ошибаться, но я не могу думать ни о чем другом. Может быть, мастер Tkinter Брайан Окли сможет объяснить нам, что вызывает это: D

import tkinter as tk
import tkinter.ttk as ttk

import matplotlib
import matplotlib.artist as artists
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure
import matplotlib.animation as animation


class make_window():
    def __init__(self, *args, **kwargs):
        self.win = tk.Tk()
        # moving the line to here should at least allow your code to work.
        f = plt.figure(0, figsize=(20,9))
        self.win.title("Test")
        self.win.state("zoomed")

        frame = ttk.Frame(self.win)
        frame.pack()

        labelVar = tk.StringVar()
        labelVar.set("Hi")
        self.LabelUpdate = tk.Label(frame, textvariable = labelVar)
        self.LabelUpdate.pack()


window = make_window()
window.win.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...