EnvironnementTk copies seulement si le presse-papiers "coller" est utilisé avant le programme sort
- Python 3.6.2
- de Windows 10
Le problème
I utilisez la méthode tk clipboard_append() pour copier une chaîne dans le presse-papiers.
Lorsque mon programme est exécuté à partir de l'interpréteur Python, les données sont copiées dans le Presse-papiers correctement.
Lors de l'exécution à l'aide de "C: \ Python36.exe myprogram.py", cependant, j'obtiens un comportement étrange.
- Si je coller les données alors que le programme est toujours en cours, il fonctionne comme prévu.
- Si je coller les données pendant que le programme est en cours d'exécution, puis fermez le programme, je peux continuer à coller les données.
- Si je ferme le programme après copie mais avant coller, le Presse-papiers est vide.
Question
Comment puis-je faire une copie tk au presse-papiers, peu importe ce qui se passe à la fenêtre contenant?
Mon 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()
Objet du Programme
Mon entreprise dispose d'un serveur de test que nous utilisons pour de nouvelles fonctionnalités. Chaque fois que nous créons une nouvelle fonctionnalité, nous devons publier une URL sur le serveur de test. Les URL sont identiques sauf pour le numéro de fonction, donc j'ai créé ce programme python pour générer l'url pour moi et le copier dans le presse-papier.
Je peux obtenir ce travail si je commente "top.destroy" et collez l'URL avant de fermer manuellement la fenêtre, mais je voudrais vraiment éviter cela. Dans un monde parfait, j'appuierais sur un raccourci, j'ouvrirais la fenêtre, entrerais mon numéro de fonction, puis j'appuierais simplement sur la touche Entrée pour fermer la fenêtre et coller la nouvelle adresse, le tout sans enlever mes mains du clavier.
'' ipdateLink' dans featureNumber.bind ("", updateLink) 'ne figure pas dans votre code à l'origine que votre code soit pas testable. Veuillez fournir une version testable de votre code. Ce message devrait vous aider: [Exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) –
Cela semble être un doublon de https://stackoverflow.com/q/20866593/7432 –
I suggère d'essayer la suggestion ici pour voir si elle résout votre problème: https://bugs.python.org/msg254055 –