我有一個 python tkinter 應用程序腳本,可以在按下按鈕時截取屏幕截圖。但不幸的是,在截屏時,應用程序的窗口也被捕獲。這是應用程序的代碼:from PIL import ImageGrabimport tkinter as tkfrom tkinter import filedialogimport timedef takeShot(): sc = ImageGrab.grab() path = filedialog.asksaveasfilename(defaultextension='.png') sc.save(path)root = tk.Tk()canvas1 = tk.Canvas(root,width=300,height=300)canvas1.pack()but = tk.Button(text='Take Screenshot',command=takeShot,bg='green',fg='white',font=10)canvas1.create_window(150,150,window=but)root.mainloop()雖然它會截取屏幕截圖,但應用程序窗口也會被捕獲我不希望屏幕截圖中出現那個白色窗口。我試圖最小化窗口,然后通過更新這樣的函數來最大化:def takeShot(): root.withdraw() sc = ImageGrab.grab() root.deiconify() path = filedialog.asksaveasfilename(defaultextension='.png') sc.save(path)但它沒有用。有沒有辦法最小化應用程序然后截取屏幕截圖然后最大化它以保存對話框以便捕獲全屏?
2 回答

慕婉清6462132
TA貢獻1804條經驗 獲得超2個贊
您需要在調用root.update_idletasks()
后調用root.withdraw()
以強制 tkinter 重繪窗口(或者在這種情況下,從視圖中刪除窗口)。
如果您發現這root.update_idletasks()
不會導致窗口在您的平臺上隱藏,您可以嘗試root.update()
. update_idletasks
不過應該可以。

UYOU
TA貢獻1878條經驗 獲得超4個贊
我在運行 Python 3.8.1 的 Windows 中沒有問題。但是,我建議在模態對話框之后移動右側并在關閉后返回asksaveasfilename(...):root.withdraw()asksaveasfilename(...)
def take_snapshot():
root.withdraw()
filename = filedialog.asksaveasfilename(initialdir='.', defaultextension='.png')
if filename:
image = ImageGrab.grab()
image.save(filename)
root.deiconify()
添加回答
舉報
0/150
提交
取消