如果 x 相同,你怎么不打印?

how do you not print if x is the same?

我是 python 的新手。我想创建一个程序,当您将某些内容复制到剪贴板时,它将 'prints' 它放在 'app' 上。它可以工作,但问题是它每两秒钟显示您可能在 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()

谢谢!

你可以创建一个名为 old_x 的变量,将 x 的最后一个值存储在那里,并在 Label 行周围放置一个 if 语句,这样它只在 x 不是 [=13= 时打印]

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()

您可以简单地添加一个 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()

这是一个 OOP 示例。这有助于避免使用 global 的需要。一般来说,最好避免全局。如果您想了解更多,这里有一些很好的 post。

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()