2017-02-24 75 views
1

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

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

当我在怠速运转这个我能贴上“测试”之后,但在PyCharm它只是说,“过程与退出代码0结束”,但没有什么在剪贴板中(即使之前有运行)。我有Python 3.5作为选定的解释器。

回答

1

似乎有问题,如果剪贴板被操纵,并且程序很快关闭太快。下面的程序为我工作,但是当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)) 
+0

如果在文本复制到剪贴板后不想销毁应用程序,该怎么办?但是,如果用户在将文本复制到剪贴板后不久就退出程序,那么应用程序就会被销毁。 –