LoginSignup
1
0

More than 1 year has passed since last update.

Python3 Tkinter 右クリックしたらメニューの出るエントリの作成

Last updated at Posted at 2021-09-15

1. はじめに

今回はTkinterで,右クリックしたらメニューの出るエントリの作成を作成する.

2. ソースコード

myentry.py
import tkinter as tk


class MyEntry(tk.Entry):
    def __init__(self, master):
        self.default_fontfamily = "Yu Gothic UI"
        self.default_fontsize = 10

        super().__init__(master)
        self.__create_menu()
        self.__bind_event()


    def __create_menu(self):
        self.menu = tk.Menu(root, tearoff=0, background="#111111", foreground="#eeeeee", activebackground="#000000", activeforeground="#ffffff")
        self.menu.add_command(label = "Cut", command=self.__on_cut, font=(self.default_fontfamily, self.default_fontsize))
        self.menu.add_command(label = "Copy", command=self.__on_copy, font=(self.default_fontfamily, self.default_fontsize))
        self.menu.add_command(label = "Paste", command=self.__on_paste, font=(self.default_fontfamily, self.default_fontsize))
        self.menu.add_command(label = "Delete", command=self.__on_delete, font=(self.default_fontfamily, self.default_fontsize))
        self.menu.add_separator()
        self.menu.add_command(label = "Select all", command=self.__on_select_all, font=(self.default_fontfamily, self.default_fontsize))


    def __on_cut(self):
        self.event_generate("<<Cut>>")


    def __on_copy(self):
        self.event_generate("<<Copy>>")


    def __on_paste(self):
        self.event_generate("<<Paste>>")


    def __on_delete(self):
        # from tkinter/constants.py
        #first = self.index(tk.SEL_FIRST)
        #last = self.index(tk.SEL_LAST)

        first = self.index("sel.first")
        last = self.index("sel.last")
        self.delete(first, last)


    def __on_select_all(self):
        self.select_range(0, "end")


    def __bind_event(self):
        self.bind("<Button-3>", self.__do_popup)


    def __do_popup(self, e):
        try:
            self.menu.tk_popup(e.x_root, e.y_root)
        finally:
            self.menu.grab_release()


if __name__ == "__main__":
    root = tk.Tk()

    entry1 = MyEntry(root)
    entry1.grid()

    entry2 = MyEntry(root)
    entry2.grid()

    root.mainloop()

外観等

Animation.gif

補足説明

MyEntry()のコンストラクタ(__init__())内で,継承したtk.Entry の コンストラクタ(__init__())を読んだ後,tk.Menu の設定をしている.

使用時は if __name__ == "__main__": にあるように,tk.Entry と同様の使い方をする.

3.おわりに

深くは記載しない.

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0