Tkinter复制到剪贴板不在PyCharm中工作

时间:2017-02-24 17:02:49

标签: python-3.x tkinter pycharm

我刚刚安装了PyCharm并打开了我在IDLE中使用的脚本,它执行了一些字符串操作然后将其复制到剪贴板,但是当我在PyCharm中运行它时它不起作用。

from tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append("test")
r.destroy()

当我在IDLE中运行时,我可以粘贴" test"之后,但是在PyCharm中它只是说"过程完成了退出代码0"但剪贴板中没有任何内容(即使在运行之前有)。我有Python 3.5作为选定的解释器。

1 个答案:

答案 0 :(得分:2)

如果操作剪贴板并且程序很快关闭太快,似乎有问题。下面的程序对我有用,但是当root.after的调用仅使用一毫秒的延迟时,它是不可靠的。尝试了其他可能性,但下面的代码应该有效:

import random
import string
import tkinter


def main():
    root = tkinter.Tk()
    root.after_idle(run_code, root)
    root.after(100, root.destroy)
    root.mainloop()


def run_code(root):
    root.withdraw()
    root.clipboard_clear()
    root.clipboard_append(''.join(random.sample(string.ascii_letters, 10)))
    print('Clipboard is ready.')


if __name__ == '__main__':
    main()

以下是该程序稍微有用的版本,并演示您可以多次调用root.after_idle以顺序方式运行代码。它的设计主要用于处理命令行参数并将它们发送到剪贴板:

import sys
import tkinter


def main(argv):
    root = tkinter.Tk()
    root.after_idle(root.withdraw)
    root.after_idle(root.clipboard_clear)
    root.after_idle(root.clipboard_append, ' '.join(argv[1:]))
    root.after_idle(print, 'The clipboard is ready.')
    root.after(100, root.destroy)
    root.mainloop()
    return 0


if __name__ == '__main__':
    sys.exit(main(sys.argv))