From 8a60fd10b8761e92379c201150ee0e99fcf73644 Mon Sep 17 00:00:00 2001 From: Legopitstop <1589lego@gmail.com> Date: Mon, 20 Jan 2025 21:31:42 -0600 Subject: [PATCH 1/4] Added tkinter snippet --- .../python/[tkinter]/basics/hello-world.md | 22 +++++++++++++++++++ snippets/python/[tkinter]/icon.svg | 1 + 2 files changed, 23 insertions(+) create mode 100644 snippets/python/[tkinter]/basics/hello-world.md create mode 100644 snippets/python/[tkinter]/icon.svg diff --git a/snippets/python/[tkinter]/basics/hello-world.md b/snippets/python/[tkinter]/basics/hello-world.md new file mode 100644 index 00000000..9dbd2dbb --- /dev/null +++ b/snippets/python/[tkinter]/basics/hello-world.md @@ -0,0 +1,22 @@ +--- +title: Hello, World! +description: Creates a basic Tkinter window with a "Hello, World!" label. +author: Legopitstop +tags: app,hello-world,object-oriented +--- + +```py +from tkinter import Tk, Label + +class App(Tk): + def __init__(self): + Tk.__init__(self) + self.geometry("100x100") + + self.lbl = Label(self, text='Hello, World!') + self.lbl.pack(expand=1) + +# Usage: +root = App() +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/icon.svg b/snippets/python/[tkinter]/icon.svg new file mode 100644 index 00000000..9316a704 --- /dev/null +++ b/snippets/python/[tkinter]/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file From c6e9e612daa9e982c39c9aa8d085c2b31de3f8e6 Mon Sep 17 00:00:00 2001 From: Legopitstop <1589lego@gmail.com> Date: Tue, 21 Jan 2025 20:32:09 -0600 Subject: [PATCH 2/4] Increased window size --- snippets/python/[tkinter]/basics/hello-world.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snippets/python/[tkinter]/basics/hello-world.md b/snippets/python/[tkinter]/basics/hello-world.md index 9dbd2dbb..12b6e724 100644 --- a/snippets/python/[tkinter]/basics/hello-world.md +++ b/snippets/python/[tkinter]/basics/hello-world.md @@ -11,7 +11,7 @@ from tkinter import Tk, Label class App(Tk): def __init__(self): Tk.__init__(self) - self.geometry("100x100") + self.geometry("200x200") self.lbl = Label(self, text='Hello, World!') self.lbl.pack(expand=1) From 7baca3727e74afab6e03e54bc555b231efce2b98 Mon Sep 17 00:00:00 2001 From: Legopitstop <1589lego@gmail.com> Date: Tue, 21 Jan 2025 20:32:36 -0600 Subject: [PATCH 3/4] Added tkinter snippets --- .../basics/display-a-pillow-image.md | 49 +++++++++++++++++++ .../entry-validation/allow-alphanumeric.md | 24 +++++++++ .../entry-validation/allow-decimal.md | 32 ++++++++++++ .../allow-digits-with-a-max-length.md | 27 ++++++++++ .../entry-validation/allow-lowercase.md | 24 +++++++++ .../allow-negative-integers.md | 28 +++++++++++ .../allow-numbers-in-range.md | 32 ++++++++++++ .../entry-validation/allow-only-alphabets.md | 24 +++++++++ .../entry-validation/allow-only-digits.md | 24 +++++++++ .../allow-positive-integers.md | 24 +++++++++ .../entry-validation/allow-signed-decimals.md | 32 ++++++++++++ .../entry-validation/allow-signed-integers.md | 30 ++++++++++++ .../allow-specific-characters.md | 25 ++++++++++ .../entry-validation/allow-uppercase.md | 24 +++++++++ .../custom-regular-expression.md | 28 +++++++++++ .../entry-validation/restrict-length.md | 25 ++++++++++ .../entry-validation/validate-file-path.md | 27 ++++++++++ .../python/[tkinter]/menus/context-menu.md | 31 ++++++++++++ 18 files changed, 510 insertions(+) create mode 100644 snippets/python/[tkinter]/basics/display-a-pillow-image.md create mode 100644 snippets/python/[tkinter]/entry-validation/allow-alphanumeric.md create mode 100644 snippets/python/[tkinter]/entry-validation/allow-decimal.md create mode 100644 snippets/python/[tkinter]/entry-validation/allow-digits-with-a-max-length.md create mode 100644 snippets/python/[tkinter]/entry-validation/allow-lowercase.md create mode 100644 snippets/python/[tkinter]/entry-validation/allow-negative-integers.md create mode 100644 snippets/python/[tkinter]/entry-validation/allow-numbers-in-range.md create mode 100644 snippets/python/[tkinter]/entry-validation/allow-only-alphabets.md create mode 100644 snippets/python/[tkinter]/entry-validation/allow-only-digits.md create mode 100644 snippets/python/[tkinter]/entry-validation/allow-positive-integers.md create mode 100644 snippets/python/[tkinter]/entry-validation/allow-signed-decimals.md create mode 100644 snippets/python/[tkinter]/entry-validation/allow-signed-integers.md create mode 100644 snippets/python/[tkinter]/entry-validation/allow-specific-characters.md create mode 100644 snippets/python/[tkinter]/entry-validation/allow-uppercase.md create mode 100644 snippets/python/[tkinter]/entry-validation/custom-regular-expression.md create mode 100644 snippets/python/[tkinter]/entry-validation/restrict-length.md create mode 100644 snippets/python/[tkinter]/entry-validation/validate-file-path.md create mode 100644 snippets/python/[tkinter]/menus/context-menu.md diff --git a/snippets/python/[tkinter]/basics/display-a-pillow-image.md b/snippets/python/[tkinter]/basics/display-a-pillow-image.md new file mode 100644 index 00000000..050d1a98 --- /dev/null +++ b/snippets/python/[tkinter]/basics/display-a-pillow-image.md @@ -0,0 +1,49 @@ +--- +title: Display a Pillow Image +description: Use Pillow to show an image in a Tkinter window. +author: Legopitstop +tags: app,hello-world,object-oriented +--- + +```py +from tkinter import Tk, Label +from PIL import Image, ImageDraw, ImageTk + + +class App(Tk): + def __init__(self): + Tk.__init__(self) + self.geometry("200x200") + + # PhotoImage must be global or be assigned to a class or it will be garbage collected. + self.photo = ImageTk.PhotoImage(self.make_image()) + lbl = Label(self, image=self.photo) + lbl.pack(expand=1) + + def make_image(self): + width, height = 200, 200 + image = Image.new("RGB", (width, height), "white") + + # Create a drawing context + draw = ImageDraw.Draw(image) + + # Draw a circle + radius = 80 + center = (width // 2, height // 2) + draw.ellipse( + [ + (center[0] - radius, center[1] - radius), + (center[0] + radius, center[1] + radius), + ], + fill="red", + outline="black", + width=3, + ) + return image + + +# Usage: +root = App() +root.mainloop() + +``` diff --git a/snippets/python/[tkinter]/entry-validation/allow-alphanumeric.md b/snippets/python/[tkinter]/entry-validation/allow-alphanumeric.md new file mode 100644 index 00000000..93677aaa --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/allow-alphanumeric.md @@ -0,0 +1,24 @@ +--- +title: Allow Alphanumeric +description: A validation function to allow alphanumeric characters. +author: Legopitstop +tags: validation,alphanumeric +--- + +```py +from tkinter import Tk, Entry + + +def allow_alphanumeric(value): + return value.isalnum() or value == "" + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(allow_alphanumeric) +Entry(root, validate="key", validatecommand=(reg, "%P")).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/allow-decimal.md b/snippets/python/[tkinter]/entry-validation/allow-decimal.md new file mode 100644 index 00000000..3b3e465d --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/allow-decimal.md @@ -0,0 +1,32 @@ +--- +title: Allow Decimal +description: A validation function to allow only decimal numbers. +author: Legopitstop +tags: validation,decimals +--- + +```py +from tkinter import Tk, Entry + + +def allow_decimal(action, value): + if action == "1": + if value == "": + return True + try: + float(value) + return True + except ValueError: + return False + return True + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(allow_decimal) +Entry(root, validate="key", validatecommand=(reg, "%d", "%P")).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/allow-digits-with-a-max-length.md b/snippets/python/[tkinter]/entry-validation/allow-digits-with-a-max-length.md new file mode 100644 index 00000000..34559991 --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/allow-digits-with-a-max-length.md @@ -0,0 +1,27 @@ +--- +title: Allow Digits with A Max Length +description: A validation function to allow only digits with a specified maximum length. +author: Legopitstop +tags: validation,max,length +--- + +```py +from tkinter import Tk, Entry + + +def allow_digits_with_max_length(action, value, max_length): + if action == "1": + return value == "" or (value.isdigit() and len(value) <= int(max_length)) + return True + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(allow_digits_with_max_length) +# 4 is the max length +Entry(root, validate="key", validatecommand=(reg, "%d", "%P", 4)).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/allow-lowercase.md b/snippets/python/[tkinter]/entry-validation/allow-lowercase.md new file mode 100644 index 00000000..3abb1fc3 --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/allow-lowercase.md @@ -0,0 +1,24 @@ +--- +title: Allow Lower Case +description: A validation function to allow only lowercase alphabetic characters. +author: Legopitstop +tags: validation,lowercase +--- + +```py +from tkinter import Tk, Entry + + +def allow_lowercase(value): + return value.islower() or value == "" + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(allow_lowercase) +Entry(root, validate="key", validatecommand=(reg, "%P")).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/allow-negative-integers.md b/snippets/python/[tkinter]/entry-validation/allow-negative-integers.md new file mode 100644 index 00000000..71286f70 --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/allow-negative-integers.md @@ -0,0 +1,28 @@ +--- +title: Allow Negative Integers +description: A validation function to allow only negative integers. +author: Legopitstop +tags: validation,negative,integers +--- + +```py +from tkinter import Tk, Entry + + +def allow_negative_integers(value): + return ( + value in ("", "-") or value.startswith("-") and value[1:].isdigit() + if value + else True + ) + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(allow_negative_integers) +Entry(root, validate="key", validatecommand=(reg, "%P")).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/allow-numbers-in-range.md b/snippets/python/[tkinter]/entry-validation/allow-numbers-in-range.md new file mode 100644 index 00000000..a0837b40 --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/allow-numbers-in-range.md @@ -0,0 +1,32 @@ +--- +title: Allow Numbers in Range +description: A validation function to allow only numbers within a specified range. +author: Legopitstop +tags: validation,number,range +--- + +```py +from tkinter import Tk, Entry + + +def allow_numbers_in_range(action, value, min_value, max_value): + if action == "1": + try: + num = float(value) + return float(min_value) <= num <= float(max_value) + except ValueError: + return False + return True + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(allow_numbers_in_range) +# 0 is the minimum value +# 10 is the maximum value +Entry(root, validate="key", validatecommand=(reg, "%d", "%P", 0, 10)).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/allow-only-alphabets.md b/snippets/python/[tkinter]/entry-validation/allow-only-alphabets.md new file mode 100644 index 00000000..c11b11bc --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/allow-only-alphabets.md @@ -0,0 +1,24 @@ +--- +title: Allow Only Alphabets +description: A validation function to allow only alphabetic characters. +author: Legopitstop +tags: validation,alphabets +--- + +```py +from tkinter import Tk, Entry + + +def allow_only_alphabets(value): + return value.isalpha() or value == "" + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(allow_only_alphabets) +Entry(root, validate="key", validatecommand=(reg, "%P")).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/allow-only-digits.md b/snippets/python/[tkinter]/entry-validation/allow-only-digits.md new file mode 100644 index 00000000..a0663cce --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/allow-only-digits.md @@ -0,0 +1,24 @@ +--- +title: Allow Only Digits +description: A validation function to allow only digits. +author: Legopitstop +tags: validation,digits +--- + +```py +from tkinter import Tk, Entry + + +def allow_only_digits(value): + return value.isdigit() or value == "" + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(allow_only_digits) +Entry(root, validate="key", validatecommand=(reg, "%P")).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/allow-positive-integers.md b/snippets/python/[tkinter]/entry-validation/allow-positive-integers.md new file mode 100644 index 00000000..a552958d --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/allow-positive-integers.md @@ -0,0 +1,24 @@ +--- +title: Allow Positive Integers +description: A validation function to allow only positive integers. +author: Legopitstop +tags: validation,positive,integers +--- + +```py +from tkinter import Tk, Entry + + +def allow_positive_integers(value): + return value.isdigit() and (value == "" or int(value) > 0) + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(allow_positive_integers) +Entry(root, validate="key", validatecommand=(reg, "%P")).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/allow-signed-decimals.md b/snippets/python/[tkinter]/entry-validation/allow-signed-decimals.md new file mode 100644 index 00000000..e19e8d1b --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/allow-signed-decimals.md @@ -0,0 +1,32 @@ +--- +title: Allow signed Decimals +description: A validation function to allow only signed decimal numbers. +author: Legopitstop +tags: validation,signed,decimals +--- + +```py +from tkinter import Tk, Entry + + +def allow_signed_decimals(action, value): + if action == "1": + try: + if value in ("", "-"): + return True + float(value) + return True + except ValueError: + return False + return True + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(allow_signed_decimals) +Entry(root, validate="key", validatecommand=(reg, "%d", "%P")).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/allow-signed-integers.md b/snippets/python/[tkinter]/entry-validation/allow-signed-integers.md new file mode 100644 index 00000000..eae6307b --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/allow-signed-integers.md @@ -0,0 +1,30 @@ +--- +title: Allow Signed Integers +description: A validation function to allow only signed integers. +author: Legopitstop +tags: validation,signed,integers +--- + +```py +from tkinter import Tk, Entry + + +def allow_signed_integers(action, value): + if action == "1": + return ( + value in ("", "-") + or value.isdigit() + or (value.startswith("-") and value[1:].isdigit()) + ) + return True + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(allow_signed_integers) +Entry(root, validate="key", validatecommand=(reg, "%d", "%P")).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/allow-specific-characters.md b/snippets/python/[tkinter]/entry-validation/allow-specific-characters.md new file mode 100644 index 00000000..5f852915 --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/allow-specific-characters.md @@ -0,0 +1,25 @@ +--- +title: Allow Specific Characters +description: A validation function to allow specific characters. +author: Legopitstop +tags: validation,regex +--- + +```py +from tkinter import Tk, Entry + + +def allow_specific_characters(value, allowed_chars): + return all(char in allowed_chars for char in value) + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(allow_specific_characters) +allowed_chars = "0123456789ABCDEFabcdef" # Hexadecimal characters +Entry(root, validate="key", validatecommand=(reg, "%P", allowed_chars)).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/allow-uppercase.md b/snippets/python/[tkinter]/entry-validation/allow-uppercase.md new file mode 100644 index 00000000..0fac61a1 --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/allow-uppercase.md @@ -0,0 +1,24 @@ +--- +title: Allow Uppercase +description: A validation function to allow uppercase letters. +author: Legopitstop +tags: validation,uppercase +--- + +```py +from tkinter import Tk, Entry + + +def allow_uppercase(value): + return value.isupper() or value == "" + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(allow_uppercase) +Entry(root, validate="key", validatecommand=(reg, "%P")).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/custom-regular-expression.md b/snippets/python/[tkinter]/entry-validation/custom-regular-expression.md new file mode 100644 index 00000000..16b35a87 --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/custom-regular-expression.md @@ -0,0 +1,28 @@ +--- +title: Custom Regular Expression +description: A validation function to match a regular expression pattern. +author: Legopitstop +tags: validation,regex,pattern +--- + +```py +from tkinter import Tk, Entry +import re + + +def custom_regular_expression(action, value, pattern): + if action == "1": + return re.fullmatch(pattern, value) is not None + return True + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(custom_regular_expression) +pattern = r"^\d{0,4}$" # Allow up to 4 digits +Entry(root, validate="key", validatecommand=(reg, "%d", "%P", pattern)).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/restrict-length.md b/snippets/python/[tkinter]/entry-validation/restrict-length.md new file mode 100644 index 00000000..e1d67cba --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/restrict-length.md @@ -0,0 +1,25 @@ +--- +title: Restrict Length +description: A validation function to limit the length. +author: Legopitstop +tags: validation,length +--- + +```py +from tkinter import Tk, Entry + + +def restrict_length(value, max_length): + return len(value) <= int(max_length) + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(restrict_length) +# 10 is the maximum length allowed +Entry(root, validate="key", validatecommand=(reg, "%P", 10)).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/entry-validation/validate-file-path.md b/snippets/python/[tkinter]/entry-validation/validate-file-path.md new file mode 100644 index 00000000..351d7a2a --- /dev/null +++ b/snippets/python/[tkinter]/entry-validation/validate-file-path.md @@ -0,0 +1,27 @@ +--- +title: Validate File Path +description: A validation function to ensure the file path exists. +author: Legopitstop +tags: validation,filepath,fp +--- + +```py +from tkinter import Tk, Entry +import os + + +def validate_file_path(action, value): + if action == "1": + return value == "" or os.path.exists(os.path.expandvars(value)) + return True + + +# Usage: +root = Tk() +root.geometry("200x200") + +reg = root.register(validate_file_path) +Entry(root, validate="key", validatecommand=(reg, "%d", "%P")).pack() + +root.mainloop() +``` diff --git a/snippets/python/[tkinter]/menus/context-menu.md b/snippets/python/[tkinter]/menus/context-menu.md new file mode 100644 index 00000000..866ad08b --- /dev/null +++ b/snippets/python/[tkinter]/menus/context-menu.md @@ -0,0 +1,31 @@ +--- +title: Context Menu +description: Opens a menu when you right click a widget. +author: Legopitstop +tags: menu +--- + +```py +from tkinter import Tk, Label, Menu + + +class App(Tk): + def __init__(self): + Tk.__init__(self) + self.geometry("200x200") + + lbl = Label(self, text="Right-click me!") + lbl.bind("", self.do_popup) + lbl.pack(expand=1, ipadx=10, ipady=10) + + def do_popup(self, event): + menu = Menu(self, tearoff=0) + menu.add_command(label="Option 1", command=lambda: print("Option 1")) + menu.add_command(label="Option 2", command=lambda: print("Option 2")) + menu.post(event.x_root, event.y_root) + + +# Usage: +root = App() +root.mainloop() +``` From ead93c6f1fcc46c3004aa8df4d470c4e735a1284 Mon Sep 17 00:00:00 2001 From: Technophile <96492656+technoph1le@users.noreply.github.com> Date: Mon, 24 Feb 2025 02:02:07 +0200 Subject: [PATCH 4/4] Fix file name matching error --- snippets/python/[tkinter]/entry-validation/allow-lowercase.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snippets/python/[tkinter]/entry-validation/allow-lowercase.md b/snippets/python/[tkinter]/entry-validation/allow-lowercase.md index 3abb1fc3..c016932f 100644 --- a/snippets/python/[tkinter]/entry-validation/allow-lowercase.md +++ b/snippets/python/[tkinter]/entry-validation/allow-lowercase.md @@ -1,5 +1,5 @@ --- -title: Allow Lower Case +title: Allow Lowercase description: A validation function to allow only lowercase alphabetic characters. author: Legopitstop tags: validation,lowercase pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy