作者caesar0929 (一生悬命)
看板Python
标题[问题] Plt只显示在某个frame而不是Tk全部frame
时间Fri Sep 14 22:02:24 2018
哈罗大家好
想请问一个问题
就是我用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()
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.194.74
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1536933748.A.BBE.html
1F:→ MOONY135: 你的作法看起来是把图画在root上面 09/15 12:44
2F:→ MOONY135: 你应该是想办法把图画在fram1上面 思考成贴纸就行 09/15 12:45
3F:→ chliu6: 可以考虑用将不用的frame用grid_forget()隐藏起来 09/15 13:07
4F:→ chliu6: 等到要用时再grid()就可以出现了 09/15 13:08
5F:→ MOONY135: on_plot 都放到frame1的class里面吧 09/16 09:27
6F:→ caesar0929: 谢谢罗~後来我用forget()解决了:D 09/17 20:23