我是 Python 的新手。我想创建一个程序,当您将某些内容复制到剪贴板时,它会在“应用程序”上“打印”它。它可以工作,但问题是每两秒钟它就会显示您可能在 2 小时前复制的内容。我希望当剪贴板相同时,它只显示一次,然后等待您复制其他内容。 这是我目前所拥有的
import pyperclip
from tkinter import *
r = Tk()
def aper():
global x
x = pyperclip.waitForPaste()
Label(r, text = x).pack()
r.after(2000, aper)
r.after(2000, aper)
r.mainloop()
谢谢!
答案 0 :(得分:1)
您可以创建一个名为 old_x 的变量,将 x 的最后一个值存储在其中,并在 Label 行周围放置一个 if 语句,以便仅在 x 不是 old_x 时才打印
import pyperclip
from tkinter import *
r = Tk()
def aper():
global x
global old_x
x = pyperclip.waitForPaste()
if x != old_x:
Label(r, text = x).pack()
old_x = x
r.after(2000, aper)
old_x = None
r.after(2000, aper)
r.mainloop()
答案 1 :(得分:1)
您可以简单地添加一个 IF 语句来检查 x 的旧值,然后在需要时进行更新。
也就是说,我将您的 tkinter 导入替换为 import tkinter as tk
。这将有助于防止覆盖任何导入的内容。只是很好的做法。
这是一个非 OOP 示例。
import tkinter as tk
import pyperclip
r = tk.Tk()
x = ''
def aper():
global x
y = pyperclip.waitForPaste()
if x != y:
x = y
tk.Label(r, text=x).pack()
r.after(2000, aper)
r.after(2000, aper)
r.mainloop()
这是一个面向对象的例子。这有助于您避免使用 global
。一般来说,最好避免全局。如果您想了解更多信息,这里有一些关于此的好帖子。
import tkinter as tk
import pyperclip
class App(tk.Tk):
def __init__(self):
super().__init__()
self.x = ''
print('t')
def aper(self):
y = pyperclip.waitForPaste()
if self.x != y:
self.x = y
tk.Label(self, text=self.x).pack()
self.after(2000, self.aper)
if __name__ == '__main__':
App().mainloop()