Tk only copies to clipboard if "paste" is used before program exits

Viewed 1729

Environment

  • Python 3.6.2
  • Windows 10

The Problem

I use the tk method clipboard_append() to copy a string to the clipboard.

When my program is run from the Python interpreter data is copied to the clipboard correctly.

When run using "C:\Python36.exe myprogram.py" however, I get some weird behavior.

  1. If I paste the data while the program is still running, it works as expected.
  2. If I paste the data while the program is running, then close the program, I can continue to paste the data.
  3. If I close the program after copying but before pasting, the clipboard is empty.

Question

How do I make tk copy to the clipboard regardless of what happens to the containing window?

My Code

from tkinter import *
from tkinter import messagebox

url = 'http://testServer/feature/'

def copyToClipboard():
    top.clipboard_clear()
    top.clipboard_append(fullURL.get())
    top.update()
    top.destroy()

def updateURL(event):
    fullURL.set(url + featureNumber.get())

def submit(event):
    copyToClipboard()

top = Tk()
top.geometry("400x75")
top.title = "Get Test URL"

topRow = Frame(top)
topRow.pack(side = TOP)

bottomRow = Frame(top)
bottomRow.pack(side = BOTTOM)

featureLabel = Label(topRow, text="Feature Number")
featureLabel.pack(side = LEFT)

featureNumber =  Entry(topRow)
featureNumber.pack(side = RIGHT)

fullURL = StringVar()
fullURL.set(url)

fullLine = Label(bottomRow, textvariable=fullURL)
fullLine.pack(side = TOP)

copyButton = Button(bottomRow, text = "Copy", command = copyToClipboard)
copyButton.pack(side = TOP)

featureNumber.focus_set()
featureNumber.bind("<KeyRelease>", updateURL)
featureNumber.bind("<Return>", submit)

top.mainloop()

Purpose of the Program

My company has a test server we use for new features. Every time we create a new feature we need to post a url to it on the test server. The urls are identical save for the feature number, so I created this python program to generate the url for me and copy it to the clipboard.

I can get this working if I comment out "top.destroy" and paste the url before manually closing the window, but I would really like to avoid this. In a perfect world I would press a shortcut, have the window pop up, enter my feature number, then just press enter to close the window and paste the new url, all without taking my hands off the keyboard.

1 Answers
Related