[問題] 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