[英]Tkinter button does not appear, sorry guys I know that a thread already exists
它沒有出現的按鈕,有什么提示嗎? 屏幕截圖功能可以正常工作,但按鈕不行,我必須自己關閉它。
import time
from tkinter import *
import pyautogui
class App:
def __init__(self, master, task):
frame = Frame(master)
frame.pack()
self.button = Button(
frame, text="QUIT", fg="red", command=frame.quit
)
self.button.pack(side=LEFT)
frame.after(0,task)
def task():
i = 1
while i > 0:
myScreenshot = pyautogui.screenshot()
myScreenshot.save(r"C:\Users\elsin\Desktop\python\nameTask" + str(i) + ".png")
time.sleep(2)
i += 1
root = Tk()
app = App(root,task())
root.mainloop()
錯誤:
C:\Users\elsin\PycharmProjects\pythonProject\venv\Scripts\python.exe C:/Users/elsin/PycharmProjects/pythonProject/1.py
Traceback (most recent call last):
File "C:\Users\elsin\PycharmProjects\pythonProject\1.py", line 28, in <module>
app = App(root,task())
File "C:\Users\elsin\PycharmProjects\pythonProject\1.py", line 23, in task
time.sleep(2)
KeyboardInterrupt
Process finished with exit code -1073741510 (0xC000013A: interrupted by Ctrl+C)
首先:您必須發送不帶()
的函數名稱。
此時你有類似的東西
result = task()
app = App(root, result)
但是task()
運行while
-loop 一直運行並且代碼永遠不會進入行App(root, result)
- 所以它無法顯示它。
如果您發送函數的名稱,那么您將遇到另一個問題 - 您的frame.after(0, task)
立即啟動此任務並阻止 rest 代碼。
如果您使用一些延遲frame.after(100, task)
那么它將有時間用按鈕顯示 window 。
但是它仍然存在運行while
-loop 並且阻塞的task
的問題
mainloop and
tkinter` 被凍結。
主要問題是您有兩個必須同時工作的循環:
mainloop()
,while
循環這需要在單獨的線程中運行其中一個,或者您必須使用root.after(2000, task)
而不是while
+ sleep()
順便說一句:您應該使用master.destroy
而不是frame.quit
來停止 tkinter 程序
import time
import tkinter as tk # PEP8: `import *` is not preferred
import pyautogui
class App:
def __init__(self, master, task):
frame = tk.Frame(master)
frame.pack()
self.button = tk.Button(frame, text="QUIT", fg="red", command=master.destroy)
self.button.pack(side='left')
frame.after(100, task, 1)
def task(i):
myScreenshot = pyautogui.screenshot()
myScreenshot.save(r"C:\Users\elsin\Desktop\python\nameTask" + str(i) + ".png")
i += 1
root.after(2000, task, i)
root = tk.Tk()
app = App(root, task)
root.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.