[問題] Plt只顯示在某個frame而不是Tk全部frame

看板Python作者 (一生懸命)時間6年前 (2018/09/14 22:02), 編輯推噓0(006)
留言6則, 3人參與, 6年前最新討論串1/2 (看更多)
哈囉大家好 想請問一個問題 就是我用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://www.ptt.cc/bbs/Python/M.1536933748.A.BBE.html

09/15 12:44, 6年前 , 1F
你的作法看起來是把圖畫在root上面
09/15 12:44, 1F

09/15 12:45, 6年前 , 2F
你應該是想辦法把圖畫在fram1上面 思考成貼紙就行
09/15 12:45, 2F

09/15 13:07, 6年前 , 3F
可以考慮用將不用的frame用grid_forget()隱藏起來
09/15 13:07, 3F

09/15 13:08, 6年前 , 4F
等到要用時再grid()就可以出現了
09/15 13:08, 4F

09/16 09:27, 6年前 , 5F
on_plot 都放到frame1的class裡面吧
09/16 09:27, 5F

09/17 20:23, 6年前 , 6F
謝謝囉~後來我用forget()解決了:D
09/17 20:23, 6F
文章代碼(AID): #1Rcxzqk- (Python)
文章代碼(AID): #1Rcxzqk- (Python)