[问题] Plt只显示在某个frame而不是Tk全部frame

楼主: caesar0929 (青草茶)   2018-09-14 22:02:24
哈囉大家好
想请问一个问题
就是我用tk做了两页frame(StartPage, ThreePage)
然后我做了两个按钮 一个从StartPage换到ThreePage 另一个是在StartPage贴一张图
我希望当我按了贴图的按钮后 再换到ThreePage时 图会消失
接着再按home按钮返回时 图会直接再出现
但现在这个写法是 当我按了按钮以后 图就永远在那里 换到ThreePage也依旧在那
我觉得应该是label那边不能用root 但我用self他会错误
想请问该怎么做呢?
谢谢
import os
import sys
import matplotlib
matplotlib.use("TkAgg")
import tkinter as tk
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,
NavigationToolbar2TkAgg
from matplotlib.figure import Figure
from PIL import Image, ImageTk
#### Change working dir ####
pathProg = os.getcwd()
os.chdir(pathProg)
def on_Plot():
global img1
global La
img1 = ImageTk.PhotoImage(file='Hey.jpg')
La = tk.Label(root, text="abc", image=img1, bg='gray')
La.place(x=200, y=150, width=100, height=100)
La.update_idletasks()
class Application(tk.Tk):
def __init__(self):
super().__init__()
self.wm_title('Hello')
self.geometry('500x500')
container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (StartPage, PageThree):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, root):
super().__init__(parent)
butt3 = tk.Button(self, text="Page3", command = lambda:
root.show_frame(PageThree))
butt3.place(x=100, y=400, width=150, height=80)
butt4 = tk.Button(self, text="Plot", command = on_Plot)
butt4.place(x=300, y=400, width=150, height=80)
class PageThree(tk.Frame):
def __init__(self, parent, root):
super().__init__(parent)
button1 = tk.Button(self, text="Home", command=lambda:
root.show_frame(StartPage)).pack()
root = Application()
root.mainloop()
作者: MOONY135 (谈无欲)   2018-09-15 12:44:00
你的作法看起来是把图画在root上面你应该是想办法把图画在fram1上面 思考成贴纸就行
作者: chliu6 (反正我就是烂)   2018-09-15 13:07:00
可以考虑用将不用的frame用grid_forget()隐藏起来等到要用时再grid()就可以出现了
作者: MOONY135 (谈无欲)   2018-09-16 09:27:00
on_plot 都放到frame1的class里面吧
楼主: caesar0929 (青草茶)   2018-09-17 20:23:00
谢谢囉~后来我用forget()解决了:D

Links booklink

Contact Us: admin [ a t ] ucptt.com