tkinter设置右键复制/剪切/粘贴菜单栏
本文最后更新于 408 天前,其中的信息可能已经有所发展或是发生改变。

在tkinter中设置一个右键菜单栏并不很难。
但是想要操作系统粘贴板就要找一些资料了,小编在下面给大家整理了一下生成右键菜单栏的步骤:

1.生成一个菜单栏
    1.1 生成3个按钮
2.写右键菜单的回调函数
    2.1 复制
        2.1.1 获得输入框文本
        2.1.2 防止在没有文本时报错
        2.1.2 存入系统粘贴板
    2.2 粘贴
        2.2.1 获得粘贴板文字
        2.2.2 添加到文本框中去
    2.3 剪切
        2.3.1 获得输入框文本
        2.3.2 防止在没有文本时报错
        2.3.3 存入系统粘贴板
        2.3.4 清空文本框内容
3.生成一个文本框
    3.1 StringVar()绑定输入框文字
    3.2 设置输入框其他属性
4.绑定在文本框上单击右键事件
5.当单击右键时,传递事件给菜单

这样一分析,是不是立刻就清楚很多呢?

以下是示例代码:

from tkinter import *

#设置主窗体
root = Tk()
root.title('试试文本框右键菜单')
root.resizable(False,False)
root.geometry("300x100+200+20")
#上面一篇文章有讲到,不重复了

Label(root,text='下面是一个刚刚被生成的文本框,试试操作吧').pack(side="top")
Label(root).pack(side="top")
#生成两个标签,一个显示文字,一个调整文本框位置,看起来美观一些

show = StringVar()
#设置文本框绑定值,StringVar()必须要在主场提生成之后设置,否则会报错

#Entry创建显示
Entry = Entry(root,textvariable = show,width="30")
Entry.pack()

#menu函数创建
class section:
#粘贴的回调函数
    def onPaste(self):
        try:
            self.text = root.clipboard_get()
            #获得系统粘贴板内容
        except TclError:
            pass
        #防止因为粘贴板没有内容报错
        show.set(str(self.text))
        #在文本框中设置刚刚获得的内容

#复制的回调函数
    def onCopy(self):
        self.text = Entry.get()
        #获得文本框内容
        root.clipboard_append(self.text)
        #添加至系统粘贴板

#剪切的回调函数
    def onCut(self):
        self.onCopy()
        #前面步骤与复制相同,所以可以直接调用复制的函数
        try:
            Entry.delete('sel.first','sel.last')
            #删除文本框中从第一个到最后一个字符
        except TclError:
            pass

#下面设置显示菜单栏
        
section = section()
#实例化刚刚写的类

menu = Menu(root,tearoff=0)
#tearoff设置成0就不会有开头的虚线,也不会让你的菜单可以单独成为窗口,可以自己试验一下

menu.add_command(label="复制",command=section.onCopy)
menu.add_separator()
menu.add_command(label="粘贴",command=section.onPaste)
menu.add_separator()
menu.add_command(label="剪切",command=section.onCut)
#添加三个按钮,command设置回调函数
# menu.add_separator 用来设置每个菜单按钮之间的间隔符(横线)

def popupmenu(event):
    menu.post(event.x_root,event.y_root)
#用来把单击事件传递给菜单
# event.x_root,event.y_root 用来把单击位置发送出去,用来帮助确定菜单生成的位置

Entry.bind("",popupmenu)
#绑定右键单击事件到用来传递事件的函数

root.mainloop()
#主窗口循环

给大家讲的很详细了,有什么问题还可以在底下提出来哦~~

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇