第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

如何使用第 2 個(gè) Tkinter 窗口更改第 1 個(gè)圖像?

如何使用第 2 個(gè) Tkinter 窗口更改第 1 個(gè)圖像?

皈依舞 2023-04-25 15:14:25
快速摘要:選擇圖像時(shí)應(yīng)該更改綠色按鈕,但事實(shí)并非如此:我有一個(gè)window-A帶有按鈕的 Tkinter,按下該按鈕時(shí)將使用單獨(dú)的 Python 文件創(chuàng)建一個(gè)新的window-B. Window-B有兩個(gè)按鈕:新屏幕截圖或從文件夾中選擇圖像。用于此的方法應(yīng)該會更改self.image_selected,以便它可用于更新按鈕window-A以具有此新圖像。我已經(jīng)嘗試了下面的兩行代碼,但都沒有用。我也沒有收到任何錯(cuò)誤:        self.button.configure(image = img.image_selected) # first try        self.button['image'] = img.image_selected         # second try這是我的代碼(為清楚起見進(jìn)行了簡化):import tkinter as tkimport get_image_or_snipclass ButtonImg:    def __init__(self, master):        self.newWindow = None        self.master = master        self.title = "My Minimum Reproducible Example"        self.fontA = ("arial", 20, "bold")        self.canvas = tk.Canvas(height = 5)        self.canvas.pack()        self.button = tk.Button(bg="#93d9cc", height = 5, text = "Select Image",                                font = self.fontA, command = self.changeImage)        self.button.pack(fill="both")    def changeImage(self):        self.newWindow = tk.Toplevel(self.master)        img = get_image_or_snip.AcquireImage(self.newWindow)        self.button.configure(image = img.image_selected)        #self.button['image'] = img.image_selectedroot = tk.Tk()app = ButtonImg(root)root.mainloop()這是前面提到的get_image_or_snip.py代碼:import tkinter as tkfrom tkinter import filedialogfrom PIL import ImageTk, Imageimport snipping_tool
查看完整描述

1 回答

?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊

print()如果你在之前和之后get_image_or_snip.AcquireImage(self.newWindow)添加,changeImage()那么你應(yīng)該只看到第一個(gè)文本,因?yàn)槟氵\(yùn)行第二個(gè)mainloop()并且它永遠(yuǎn)不會結(jié)束這個(gè)循環(huán)并且永遠(yuǎn)不會返回changeImage()并且永遠(yuǎn)不會運(yùn)行self.button.configure(image=img.image_selected)


你應(yīng)該只使用一個(gè)mainloop()并最終使用


root.wait_window(self.newWindow)

等到你關(guān)閉第二個(gè)窗口然后它就會運(yùn)行self.button.configure(image=img.image_selected)


但還有其他問題。


當(dāng)?shù)诙€(gè)窗口被銷毀時(shí),它會從內(nèi)存中刪除圖像,因此您必須將其分配給第一個(gè)窗口中的變量。


當(dāng)您發(fā)送文本時(shí),按鈕使用字符高度,但是當(dāng)您分配圖像時(shí),它使用以像素為單位的高度,您必須將其從更改為5image.height()`


一個(gè)文件中的所有代碼


import tkinter as tk

from tkinter import filedialog

from PIL import ImageTk



class AcquireImage:

    

    def __init__(self, master):

        self.master = master

        self.fontA = ("arial", 20, "bold")

        

        self.frame = tk.Frame(master, bg="#1B2631")

        self.frame.pack(fill="both", expand=True)

        

        self.button1 = tk.Button(self.frame, text="Select Image File", padx=10, pady=10, bg="#d9a193",

                              font=self.fontA, command=lambda:self.show_dialogs(1))

        self.button1.grid(row=0, column=0, sticky="nsew")

        

        self.button2 = tk.Button(self.frame, text="Get Screen Snip", padx=10, pady=10, bg="#d9a193",

                              font=self.fontA, command=lambda:self.show_dialogs(2))

        self.button2.grid(row=0, column=1, sticky="nsew")

        

        self.image_selected = None


    def show_dialogs(self, method):

        

        if method == 1:

            ret = filedialog.askopenfilename(initialdir='/home/user/images/')

            if ret:

                self.image_selected = ImageTk.PhotoImage(file=ret)

                self.master.destroy()

     

        elif method == 2:

            self.image_selected = snipping_tool.get_snip()



class ButtonImg:

    

    def __init__(self, master):

        self.newWindow = None

        self.master = master

        self.title = "My Minimum Reproducible Example"

        self.fontA = ("arial", 20, "bold")

        

        self.canvas = tk.Canvas(height=5)

        self.canvas.pack()

        

        self.button = tk.Button(bg="#93d9cc", height=5, text="Select Image",

                                font=self.fontA, command=self.changeImage)

        self.button.pack(fill="both")


    def changeImage(self):

        print('open second window')

        self.newWindow = tk.Toplevel(self.master)

        img = AcquireImage(self.newWindow)

        self.master.wait_window(self.newWindow)

        print('close second window')


        if img.image_selected: # check if image was selected

            self.image = img.image_selected

            self.button.configure(image=self.image, height=self.image.height())

        


root = tk.Tk()

app = ButtonImg(root)

root.mainloop()

順便說一句:如果你想在不關(guān)閉第二個(gè)窗口的情況下更改圖像,那么你應(yīng)該將第一個(gè)窗口(或第一個(gè)窗口中的按鈕)作為參數(shù)發(fā)送給第二個(gè)窗口并更改圖像show_dialogs()


import tkinter as tk

from tkinter import filedialog

from PIL import ImageTk



class AcquireImage:

    

    def __init__(self, master, first_window):

        self.master = master

        self.first_window = first_window

        

        self.fontA = ("arial", 20, "bold")

        

        self.frame = tk.Frame(master, bg="#1B2631")

        self.frame.pack(fill="both", expand=True)

        

        self.button1 = tk.Button(self.frame, text="Select Image File", padx=10, pady=10, bg="#d9a193",

                              font=self.fontA, command=lambda:self.show_dialogs(1))

        self.button1.grid(row=0, column=0, sticky="nsew")

        

        self.button2 = tk.Button(self.frame, text="Get Screen Snip", padx=10, pady=10, bg="#d9a193",

                              font=self.fontA, command=lambda:self.show_dialogs(2))

        self.button2.grid(row=0, column=1, sticky="nsew")

        

        self.image_selected = None


    def show_dialogs(self, method):

        

        if method == 1:

            ret = filedialog.askopenfilename(initialdir='/home/user/images/')

            if ret:

                self.image_selected = ImageTk.PhotoImage(file=ret)

                self.first_window.image = self.image_selected

                self.first_window.button.configure(image=self.first_window.image, height=self.first_window.image.height())


        elif method == 2:

            self.image_selected = snipping_tool.get_snip()



class ButtonImg:

    

    def __init__(self, master):

        self.newWindow = None

        self.master = master

        self.title = "My Minimum Reproducible Example"

        self.fontA = ("arial", 20, "bold")

        

        self.canvas = tk.Canvas(height=5)

        self.canvas.pack()

        

        self.button = tk.Button(bg="#93d9cc", height=5, text="Select Image",

                                font=self.fontA, command=self.changeImage)

        self.button.pack(fill="both")


    def changeImage(self):

        self.newWindow = tk.Toplevel(self.master)

        img = AcquireImage(self.newWindow, self) # first window as `self` but you can send `self.button`


        


root = tk.Tk()

app = ButtonImg(root)

root.mainloop()


查看完整回答
反對 回復(fù) 2023-04-25
  • 1 回答
  • 0 關(guān)注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號