98 lines
2.8 KiB
Python
98 lines
2.8 KiB
Python
|
# from: https://www.pythontutorial.net/tkinter/tkinter-object-oriented-frame/
|
||
|
|
||
|
import tkinter as tk
|
||
|
from tkinter import ttk
|
||
|
|
||
|
|
||
|
class InputFrame(ttk.Frame):
|
||
|
def __init__(self, container):
|
||
|
super().__init__(container)
|
||
|
# setup the grid layout manager
|
||
|
self.columnconfigure(0, weight=1)
|
||
|
self.columnconfigure(0, weight=3)
|
||
|
|
||
|
self.__create_widgets()
|
||
|
|
||
|
def __create_widgets(self):
|
||
|
# Find what
|
||
|
ttk.Label(self, text="Find what:").grid(column=0, row=0, sticky=tk.W)
|
||
|
keyword = ttk.Entry(self, width=30)
|
||
|
keyword.focus()
|
||
|
keyword.grid(column=1, row=0, sticky=tk.W)
|
||
|
|
||
|
# Replace with:
|
||
|
ttk.Label(self, text="Replace with:").grid(column=0, row=1, sticky=tk.W)
|
||
|
replacement = ttk.Entry(self, width=30)
|
||
|
replacement.grid(column=1, row=1, sticky=tk.W)
|
||
|
|
||
|
# Match Case checkbox
|
||
|
match_case = tk.StringVar()
|
||
|
match_case_check = ttk.Checkbutton(
|
||
|
self,
|
||
|
text="Match case",
|
||
|
variable=match_case,
|
||
|
command=lambda: print(match_case.get()),
|
||
|
)
|
||
|
match_case_check.grid(column=0, row=2, sticky=tk.W)
|
||
|
|
||
|
# Wrap Around checkbox
|
||
|
wrap_around = tk.StringVar()
|
||
|
wrap_around_check = ttk.Checkbutton(
|
||
|
self,
|
||
|
variable=wrap_around,
|
||
|
text="Wrap around",
|
||
|
command=lambda: print(wrap_around.get()),
|
||
|
)
|
||
|
wrap_around_check.grid(column=0, row=3, sticky=tk.W)
|
||
|
|
||
|
for widget in self.winfo_children():
|
||
|
widget.grid(padx=0, pady=5)
|
||
|
|
||
|
|
||
|
class ButtonFrame(ttk.Frame):
|
||
|
def __init__(self, container):
|
||
|
super().__init__(container)
|
||
|
# setup the grid layout manager
|
||
|
self.columnconfigure(0, weight=1)
|
||
|
|
||
|
self.__create_widgets()
|
||
|
|
||
|
def __create_widgets(self):
|
||
|
ttk.Button(self, text="Find Next").grid(column=0, row=0)
|
||
|
ttk.Button(self, text="Replace").grid(column=0, row=1)
|
||
|
ttk.Button(self, text="Replace All").grid(column=0, row=2)
|
||
|
ttk.Button(self, text="Cancel").grid(column=0, row=3)
|
||
|
|
||
|
for widget in self.winfo_children():
|
||
|
widget.grid(padx=0, pady=3)
|
||
|
|
||
|
|
||
|
class App(tk.Tk):
|
||
|
def __init__(self):
|
||
|
super().__init__()
|
||
|
self.title("Replace")
|
||
|
self.geometry("400x150")
|
||
|
self.resizable(0, 0)
|
||
|
# windows only (remove the minimize/maximize button)
|
||
|
# self.attributes('-toolwindow', True)
|
||
|
|
||
|
# layout on the root window
|
||
|
self.columnconfigure(0, weight=4)
|
||
|
self.columnconfigure(1, weight=1)
|
||
|
|
||
|
self.__create_widgets()
|
||
|
|
||
|
def __create_widgets(self):
|
||
|
# create the input frame
|
||
|
input_frame = InputFrame(self)
|
||
|
input_frame.grid(column=0, row=0)
|
||
|
|
||
|
# create the button frame
|
||
|
button_frame = ButtonFrame(self)
|
||
|
button_frame.grid(column=1, row=0)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
app = App()
|
||
|
app.mainloop()
|