วิธีการแก้ปัญหาคือ ต้องทำลาย Label อันเก่าที่ค้างอยู่บนหน้าต่างก่อนที่จะแสดง Label ใหม่ นั่นคือ
1. ให้ตัวแปร Label เป็นตัวแปรของคลาส และ
2. ใช้คำสั่ง destroy เพื่อทำลาย Label อันเก่า
โคัดทั้งหมดหลังจากการแก้ไขก็จะเป็นดังนี้ครับ
from Tkinter import Tk,Menu,Label from PIL import Image,ImageTk class MainApp: #constructor def __init__(self,mainwindow): #assign class variable to input parameter self.mainwindow = mainwindow #set title self.mainwindow.title("Menu") self.lbl = Label(self.mainwindow) def createMenu(self): #create menubar menubar = Menu(self.mainwindow) self.mainwindow.config(menu=menubar) #FILE menu fileMenu = Menu(menubar, tearoff=0) menubar.add_cascade(label="File", menu=fileMenu) fileMenu.add_command(label="Exit", command=self.mainwindow.destroy) #PROCESS menu processMenu = Menu(menubar, tearoff=0) menubar.add_cascade(label="Process", menu=processMenu) processMenu.add_command(label="Rotate",command=self.imgRotate) def loadImage(self): self.im = Image.open("lena.jpg") self.showImage() def showImage(self): self.imTk = ImageTk.PhotoImage(self.im) self.lbl.destroy() self.lbl = Label(self.mainwindow, image=self.imTk) self.lbl.pack() def imgRotate(self): self.im = self.im.rotate(45) self.showImage() #---Main app starts here--- root = Tk() app = MainApp(root) #create menu app.createMenu() app.loadImage() root.mainloop()
โค้ดข้างต้นก็จะเป็นต้นแบบหลักๆในการประมวลผลรูปไ้ด้แล้วครับ ครั้งหน้าเราจะลองเพิ่มเมนูในการเรียกรูปต้นฉบับกลับคืนมา หลังจากประมวลผลไปแล้วครับ
No comments:
Post a Comment