Python3 Tkinter 右クリックしたらメニューの出るエントリの作成
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()
外観等
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()
補足説明
MyEntry()のコンストラクタ(__init__()
)内で,継承したtk.Entry
の コンストラクタ(__init__()
)を読んだ後,tk.Menu
の設定をしている.
使用時は if __name__ == "__main__":
にあるように,tk.Entry
と同様の使い方をする.
3.おわりに
深くは記載しない.
Author And Source
この問題について(Python3 Tkinter 右クリックしたらメニューの出るエントリの作成), 我々は、より多くの情報をここで見つけました https://qiita.com/ab-boy_ringo/items/874129f7d44c7cd6b4d5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .