2017-02-24 77 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

如果在文本複製到剪貼板後不想銷燬應用程序,該怎麼辦?但是,如果用戶在將文本複製到剪貼板後不久就退出程序,那麼應用程序就會被銷燬。 –