- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有一个带有 3 个输入框的表单。您可以右键单击 3 个输入框之一,然后选择“复制”。这应该复制您单击的特定输入框中的文本。
相反,所有 3 个输入框中的文本都会复制到剪贴板。如何仅从用户右键单击的输入框中复制文本?
#! /usr/bin/python
import os
import pypyodbc
import tkinter
from tkinter import ttk
from tkinter import messagebox
from tkinter import BOTH, END, LEFT
import tkinter as tk
class Adder(ttk.Frame):
"""The adders gui and functions."""
def __init__(self, parent, *args, **kwargs):
ttk.Frame.__init__(self, parent, *args, **kwargs)
self.root = parent
self.init_gui()
# Copy and Paste Buttons BEGIN Here
def button1(self):
self.printcopy()
self.copy()
def copy(self, event=None):
self.clipboard_clear()
text = self.first_entry.get() # This is the method I need to work on.
text2 = self.last_entry.get()
text3 = self.lic_entry.get() # All entries are copied
self.clipboard_append(text)
self.clipboard_append(text2)
self.clipboard_append(text3)
def printcopy(self):
print ('Copy!')
def popup(self, event):
self.aMenu.post(event.x_root, event.y_root)
# Copy and Paste Buttons END Here
def init_gui(self):
"""Builds GUI."""
self.root.title('Verify')
self.root.option_add('*tearOff', 'FALSE')
self.grid(column=0, row=0, sticky='nsew') # this starts the entire form
self.outline = tkinter.LabelFrame(self, height=80, width=900) # border frame
self.outline.grid(column=0, row=1, columnspan=5, padx=5, ipady=10, pady=5)
# Input Boxes and Button
self.first_entry = tkinter.Entry(self, width=28) # first input box
self.first_entry.grid(sticky='', column=1, row=1)
self.last_entry = tkinter.Entry(self, width=28) # second input box
self.last_entry.grid(sticky='', column=2, row=1)
self.lic_entry = tkinter.Entry(self, width=28) # third input box
self.lic_entry.grid(sticky='', column=3, row=1)
# Output frame for answer
self.entries = []
self.output0 = tkinter.Entry(self, width=149, justify='center', bd='0', bg='#E0E0E0')
self.output0.grid(column=0, row=6, columnspan=5, padx=1)
self.entries.append(self.output0)
# Copy and Paste
self.aMenu = tk.Menu(self, tearoff=0)
self.aMenu.add_command(label='Copy', command=self.button1)
self.first_entry.bind("<Button-3>", self.popup)
self.last_entry.bind("<Button-3>", self.popup)
self.lic_entry.bind("<Button-3>", self.popup)
self.output0.bind("<Button-3>", self.popup)
self.blank = tkinter.LabelFrame(self, height=5, bd=0,) # blank line
self.blank.grid(row=16,)
if __name__ == '__main__':
root = tkinter.Tk()
Adder(root)
root.resizable(width=False, height=False) # locks window from being resized
root.mainloop()
最佳答案
为了获得您正在寻找的行为,我重新设计了您的代码来完成您想要的。
第一,您不应该像在这里那样导入 tkinter 两次。只需使用 import tkinter as tk
这就能很好地满足您从 tkinter 需要的所有内容。
我们需要通过在 popup
方法中使用 event.widget.focus()
确保焦点位于您右键单击的小部件上,并获取当前的将焦点放在框架 self.outline
内部,然后 get()
该条目的值。
如果您将 copy()
方法更改为:
def copy(self):
self.clipboard_clear()
self.clipboard_append(self.outline.focus_get().get())
并将您的 popup()
方法更改为:
def popup(self, event):
event.widget.focus()
self.aMenu.post(event.x_root, event.y_root)
它应该按照您的需要工作。
看一下下面的代码:
from tkinter import ttk
import tkinter as tk
class Adder(ttk.Frame):
"""The adders gui and functions."""
def __init__(self, parent, *args, **kwargs):
ttk.Frame.__init__(self, parent, *args, **kwargs)
self.root = parent
self.root.title('Verify')
self.root.option_add('*tearOff', 'FALSE')
self.grid(column=0, row=0, sticky='nsew')
self.outline = tk.LabelFrame(self, height=80, width=900)
self.outline.grid(column=0, row=1, columnspan=5, padx=5, ipady=10, pady=5)
self.first_entry = tk.Entry(self, width=28)
self.first_entry.grid(sticky='', column=1, row=1)
self.first_entry.bind("<Button-3>", self.popup)
self.last_entry = tk.Entry(self, width=28)
self.last_entry.grid(sticky='', column=2, row=1)
self.last_entry.bind("<Button-3>", self.popup)
self.lic_entry = tk.Entry(self, width=28)
self.lic_entry.grid(sticky='', column=3, row=1)
self.lic_entry.bind("<Button-3>", self.popup)
self.output0 = tk.Entry(self, width=149, justify='center', bd='0', bg='#E0E0E0')
self.output0.grid(column=0, row=6, columnspan=5, padx=1)
self.output0.bind("<Button-3>", self.popup)
self.aMenu = tk.Menu(self, tearoff=0)
self.aMenu.add_command(label='Copy', command=self.copy)
self.blank = tk.LabelFrame(self, height=5, bd=0) # blank line
self.blank.grid(row=16)
def copy(self):
self.clipboard_clear()
self.clipboard_append(self.outline.focus_get().get())
def popup(self, event):
event.widget.focus()# this moves the focus to the entry field you right click in.
self.aMenu.post(event.x_root, event.y_root)
if __name__ == '__main__':
root = tk.Tk()
Adder(root)
root.resizable(width=False, height=False)
root.mainloop()
关于python - 使用剪贴板时如何检查用户右键单击了哪个输入框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45357954/
我试图在我的窗口中放置一个小的输入框,该窗口目前是一个黑色的窗口。 我的代码在下面,谁能告诉我如何将输入框输入到窗口中,谢谢 "#include /* Declare Windows proce
我发现这段代码可以为 powershell 创建简单的输入框: [void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBa
我有以下 Excel 文件的输入框。我不想显示输入字符而需要显示输入框字符 * ,该怎么做? Private Sub Workbook_Open() Dim UserName As String Us
我有一个名字输入框。我想在用户键入时自动将名称的第一个字母大写,但允许用户覆盖名称的更改,例如“de Salis”。 我看到 here 这对于 CSS 是不可能的,因为 text-transform:
嘿,伙计们,我需要帮助,我有这个样式表,里面是管理 div...它目前的宽度为 20px,高度为 50px,当鼠标指针悬停时它会变大..我希望发生的是当我将鼠标指针悬停在那里时,它会展开文本和输入框,
我正在为我的 ASP.NET 应用程序开发 UI,我有一个登录表单,其中有一个框,框内有这样的字段。 (xxxx为输入框) Name: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
为了给图标腾出空间,我将占位符文本 35px 移到了我的 input 的右侧;但是,当我开始在 input 字段中键入时,文本从图标后面开始。 我尝试了一些谷歌搜索,但我还没有找到答案。我看到的搜索结
美好的一天。我正在尝试创建自己的输入框以用于我的项目。基本上我想做的是运行我的主窗体,它将调用第二个窗体。用户将在第二个上提供一些数据,当在第二个上按下确定/关闭按钮时,数据将传回第一个。功能类似于输
我需要一个快速文本输入对话框(其中包含一个文本框的 MessageBox)。是否有可用的控件或我应该使用表单? 我只想让用户输入一些 ID。在其他情况下,我需要 2 个文本框作为用户名和密码。 最佳答
禁用 HTML 的 INPUT 文本框的代码是什么? 谢谢 最佳答案 参见 W3C HTML Specification on the input tag获取更多信息。 关于HTML 输入框 - 禁
嘿,我正在努力寻找“最佳位置”,以便它能够按照我的需要工作。 下面是我当前正在使用的 JS 代码。 和框代码: $("#ANDbtn").click(function() { if (numOR
我正在提出一个问题,人们必须输入其中包含普通文本和上标的答案。我认为最好的方法是制作一个按钮,使用户能够将文本放入上标,然后转义上标,但我不知道如何解决这个问题并使文本显示为上标。 这是我到目前为止所
我需要一个输入文本框,它只能接受 0 和 1 的字符串,例如 00101110101。 限制输入任何字母,但是,我们可以输入 1,2,3,4 等等。我需要将输入字符串限制为仅包含 0 和 1。 有什么
我有一个按钮,可以在前一个输入框的正下方添加一个输入框。我想添加一个动画,试图让它更流畅,而不是仅仅在那里弹出。到目前为止,我已经尝试过了,但是没有用。一个 fiddle 的例子会很棒。 var co
我正在尝试使用 jquery 创建一个计算 GPA 的 webview 应用程序,我创建了两个按钮,其中一个用于添加新元素,另一个用于删除元素,我正在尝试添加多个元素同时,例如模块名称、学分输入和选项
我有一个简单的输入框 具有以下样式: input { border-radius: 5px; width: 564px; opacity: 0.14; } 我的问题是因为我改
我有一个小页面,可让我通过单击“添加股票”按钮将股票添加到我的投资组合中,查看下图以供引用。 单击“添加股票”按钮会弹出一个模式框,其中列出了我可以添加到我的投资组合中的股票。 我可以通过单击“分配”
我想使用这个 css 设置:border-color: red; 对于 input 元素。 但是当我这样做时,它们的指标与默认的 chrome 边框不同。 请看这个jsfiddle: http://j
我正在尝试制作一个输入框,当它被聚焦时获取键盘输入,并且只在框的中间显示那个键名,没有闪烁的条,也不允许编辑。并且还将变量更改为键。 所以如果 [ ] 是一个输入框。我输入 F7 然后框应该显示 [
我想要一个用于输入日期的输入框,以便用户只能以一种方式输入。 键入前的输入框如下所示(没有下划线)__/__/____,以及 / 不会在用户键入日期时被删除。 谢谢 最佳答案 感谢@Bryan Oak
我是一名优秀的程序员,十分优秀!