簡體   English   中英

使用 Tkinter 將 output 復制到剪貼板的按鈕

[英]A button that copy the output into a clipboard using Tkinter

我剛剛使用 tkinter 在 python 中創建了一個程序,該程序生成隨機數並為用戶提供 3 個輸入(順便說一句,我只是 Python 的初學者)問題是我想創建一個按鈕,將 output 保存在剪貼板中? 這是代碼:

from tkinter import *
import numpy as nmpi
import random



def generate():
    srt = int(entrynbr1.get())
    rng = int(entrynbr2.get())
    sze = int(entrynbr3.get())
    values = random.sample(range(srt, rng), sze)
    hola = nmpi.array(values)

    text_entry.delete('1.0', END)
    text_entry.insert(END, str(hola))



top = Tk()

top.title("Number Generator")
top.minsize(600, 700)
top.resizable(0, 0)


lblnbr1 = Label(top, text="Start",bg='azure')
lblnbr1.place(x=120, y=50)

entrynbr1 = Entry(top, border=2)
entrynbr1.place(x=200, y=50)

lblnbr2 = Label(top, text="Range",bg='azure')
lblnbr2.place(x=120, y=100)

entrynbr2 = Entry(top, border=2)
entrynbr2.place(x=200, y=100)

lblnbr3 = Label(top, text="Size",bg='azure')
lblnbr3.place(x=120, y=150)

entrynbr3 = Entry(top, border=2)
entrynbr3.place(x=200, y=150)

gen = Button(top, border=4 ,text="Generate Numbers", bg='LightBlue1', command=generate)
gen.place(x=220, y=200)


text_entry = Text(top, width=80, height=27, border=4, relief=RAISED)
text_entry.pack()
text_entry.place(x=10, y=250)


top['background'] = 'azure'


top.mainloop()

提前致謝

您可以使用tkinter的通用clipboard_append()小部件方法之一來完成,這意味着您不需要下載和安裝額外的第三方模塊,例如clipboard (請注意,還有一個鏈接文檔未提及的clipboard_get()方法。)

以下是修改代碼的方法:我添加了一個“復制到剪貼板”按鈕並定義了一個copy_to_cliboard() function,它會在單擊時被調用。 function 使用clipboard_append()方法(在首先通過另一個名為clipboard_clear()的通用小部件方法清除剪貼板之后)。

import tkinter as tk  # PEP 8 suggests avoiding `import *`
import numpy as nmpi
import random


def generate():
    srt = int(entrynbr1.get())
    rng = int(entrynbr2.get())
    sze = int(entrynbr3.get())
    values = random.sample(range(srt, rng), sze)
    hola = nmpi.array(values)

    text_entry.delete('1.0', tk.END)
    text_entry.insert(tk.END, str(hola))


def copy_to_clipboard():
    """Copy current contents of text_entry to clipboard."""
    top.clipboard_clear()  # Optional.
    top.clipboard_append(text_entry.get('1.0', tk.END).rstrip())


top = tk.Tk()

top.title("Number Generator")
top.minsize(600, 700)
top.resizable(0, 0)

lblnbr1 = tk.Label(top, text="Start",bg='azure')
lblnbr1.place(x=120, y=50)

entrynbr1 = tk.Entry(top, border=2)
entrynbr1.place(x=200, y=50)

lblnbr2 = tk.Label(top, text="Range",bg='azure')
lblnbr2.place(x=120, y=100)

entrynbr2 = tk.Entry(top, border=2)
entrynbr2.place(x=200, y=100)

lblnbr3 = tk.Label(top, text="Size",bg='azure')
lblnbr3.place(x=120, y=150)

entrynbr3 = tk.Entry(top, border=2)
entrynbr3.place(x=200, y=150)

gen = tk.Button(top, border=4 ,text="Generate Numbers", bg='LightBlue1', command=generate)
gen.place(x=220, y=200)

clp = tk.Button(top, border=4 ,text="Copy To Clipboard", bg='LightBlue1',
                command=copy_to_clipboard)
clp.place(x=220, y=240)

text_entry = tk.Text(top, width=80, height=27, border=4, relief=tk.RAISED)
text_entry.pack()
text_entry.place(x=10, y=280)

top['background'] = 'azure'
top.mainloop()

截屏

使用clipboard模塊。 此代碼段中的示例...

import clipboard as cb
from tkinter import * #Testing

win = Tk()
foo = "bar"

copyBtn = Button(win, text="Copy To Clipboard")
copyBtn.pack()

def copyToClipboard(stringToCopy: str):
    cb.copy(stringToCopy)

copyBtn.bind("<Button-1>", lambda e: copyToClipboard(foo))
win.mainloop()

您還可以使用cb.paste()從剪貼板粘貼字符串並將其分配給變量。 您需要從 pip 安裝模塊。

如果此方法不夠用, 這里還有一些其他方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM