Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • nd2-trung/advanced_software_2
1 result
Show changes
Commits on Source (2)
Showing with 1634 additions and 0 deletions
from tkinter import *
from tkinter import ttk
wndw = Tk()
wndw.title("This is my first TK")
#grid
# frm = ttk.Frame(wndw, padding=100)
# frm.grid()
# ttk.Label(frm, text="Hello World!").grid(column=0, row=0)
# ttk.Button(frm, text="Quit", command=wndw.destroy).grid(column=1,
# row=0)
# wndw.mainloop()
#pack
frm = ttk.Frame(wndw, padding=10)
frm.pack()
ttk.Label(frm, text="Hello World!").pack(side=LEFT, padx=0, pady=100)
ttk.Button(frm, text="Quit", command=wndw.destroy).pack(side=RIGHT, padx=5, pady=5)
wndw.mainloop()
#place
# frm = ttk.Frame(wndw, padding=10)
# frm.place(x=20, y=20) # Specify exact position
# label = ttk.Label(frm, text="Hello World!")
# label.place(x=10, y=10) # Manually set coordinates
# button = ttk.Button(frm, text="Quit", command=wndw.destroy)
# button.place(x=100, y=10) # Manually set coordinates
# wndw.geometry("300x150") # Set window size for better visibility
# wndw.mainloop()
\ No newline at end of file
week 8/UWE Bristol.png

23.4 KiB

%% Cell type:markdown id: tags:
3a
%% Cell type:code id: tags:
``` python
from tkinter import Tk
# Create main window
wndw = Tk()
wndw.title("My Empty Window")
# Set window size
wndw.geometry("300x200")
# Start the main event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
3b
%% Cell type:code id: tags:
``` python
from tkinter import Tk
from tkinter import ttk
# Create main window
wndw = Tk()
wndw.title("My Simple GUI")
wndw.geometry("300x200")
# Create frame
frm = ttk.Frame(wndw, padding=10)
frm.grid()
# Add label
ttk.Label(frm, text="Welcome to Tkinter!").grid(column=0, row=0)
# Add button
ttk.Button(frm, text="Hello UWE").grid(column=0, row=1)
# Start the main event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
3c
%% Cell type:code id: tags:
``` python
from tkinter import Tk, messagebox
from tkinter import ttk
# Create main window
wndw = Tk()
wndw.title("Interactive GUI")
wndw.geometry("300x200")
# Function to show message
def show_message():
messagebox.showinfo("Greeting", "Hello UWE!")
# Create frame
frm = ttk.Frame(wndw, padding=10)
frm.grid()
# Add label
ttk.Label(frm, text="Click the button below:").grid(column=0, row=0)
# Add button and link function
ttk.Button(frm, text="Hello UWE", command=show_message).grid(column=0, row=1)
# Start the main event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
3d
%% Cell type:code id: tags:
``` python
from tkinter import Tk, Canvas
# Create main window
wndw = Tk()
wndw.title("Canvas Example")
wndw.geometry("300x200")
# Create canvas
cnvs = Canvas(wndw, width=200, height=150, bg="red")
cnvs.pack(pady=20)
# Start the main event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
3.e, f
%% Cell type:code id: tags:
``` python
from tkinter import Tk, Canvas, PhotoImage
from PIL import Image, ImageTk
# Create main window
wndw = Tk()
wndw.title("Resized Image on Canvas")
wndw.geometry("300x200")
# Open and resize the image
original_image = Image.open("UWE Bristol.png") # Replace with your image path
resized_image = original_image.resize((200, 150)) # Match canvas size
# Convert the resized image to PhotoImage
uwe_logo = ImageTk.PhotoImage(resized_image)
# Create canvas
cnvs = Canvas(wndw, width=200, height=150)
cnvs.pack()
# Add image to canvas
cnvs.create_image(100, 75, image=uwe_logo) # Center of canvas
# Start the main event loop
wndw.mainloop()
```
%% Cell type:code id: tags:
``` python
from tkinter import Tk, Canvas, messagebox, ttk
from PIL import Image, ImageTk # For image resizing
# Function to show a message when button is clicked
def show_message():
messagebox.showinfo("Greeting", "Hello UWE!")
# Create main window
wndw = Tk()
wndw.title("Complete GUI Example")
wndw.geometry("400x300") # Adjusted size for better layout
# Create a frame for better organization
frm = ttk.Frame(wndw, padding=10)
frm.grid()
# Add a label
ttk.Label(frm, text="Welcome to My Tkinter GUI!").grid(column=0, row=0, columnspan=2)
# Add a button that shows a message when clicked
ttk.Button(frm, text="Hello UWE", command=show_message).grid(column=0, row=1)
# Create canvas
canvas_width = 200
canvas_height = 150
cnvs = Canvas(frm, width=canvas_width, height=canvas_height, bg="red")
cnvs.grid(column=1, row=1, padx=10, pady=10) # Position next to button
# Load and resize image (make sure "uwe_logo.png" exists in the same directory)
original_image = Image.open("UWE Bristol.png") # Replace with your image file
resized_image = original_image.resize((canvas_width, canvas_height)) # Resize to fit canvas
uwe_logo = ImageTk.PhotoImage(resized_image)
# Add image to canvas
cnvs.create_image(canvas_width // 2, canvas_height // 2, image=uwe_logo)
# Start the main event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
4a
%% Cell type:code id: tags:
``` python
from tkinter import Tk, ttk
# Create main window
wndw = Tk()
wndw.title("Search Example")
wndw.geometry("300x150") # Set window size
# Create a frame
frm = ttk.Frame(wndw, padding=10)
frm.grid()
# Add a text field (Entry widget)
entry = ttk.Entry(frm, width=20)
entry.grid(column=0, row=0, padx=5, pady=5)
# Add a button (doesn't do anything yet)
ttk.Button(frm, text="SEARCH").grid(column=1, row=0, padx=5, pady=5)
# Start the event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
4b
%% Cell type:code id: tags:
``` python
from tkinter import Tk, messagebox, ttk
# Function to capture and display text
def show_input():
user_input = entry.get() # Get text from entry field
messagebox.showinfo("Your Input", f"You entered: {user_input}")
# Create main window
wndw = Tk()
wndw.title("Search Example")
wndw.geometry("300x150")
# Create a frame
frm = ttk.Frame(wndw, padding=10)
frm.grid()
# Add a text field
entry = ttk.Entry(frm, width=20)
entry.grid(column=0, row=0, padx=5, pady=5)
# Add a button that captures input
ttk.Button(frm, text="SEARCH", command=show_input).grid(column=1, row=0, padx=5, pady=5)
# Start the event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
4c. improve 4b
%% Cell type:code id: tags:
``` python
from tkinter import Tk, messagebox, ttk
# Function to capture and display text
def show_input():
user_input = entry.get()
messagebox.showinfo("Your Input", f"You entered: {user_input}")
# Create main window
wndw = Tk()
wndw.title("Enhanced GUI")
wndw.geometry("400x200")
# Create main frame
main_frame = ttk.Frame(wndw, padding=20)
main_frame.pack(expand=True)
# Add label
ttk.Label(main_frame, text="Enter something and click SEARCH:").pack(pady=5)
# Add text entry
entry = ttk.Entry(main_frame, width=30)
entry.pack(pady=5)
# Add button
ttk.Button(main_frame, text="SEARCH", command=show_input).pack(pady=5)
# Start the event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
4d, e
%% Cell type:code id: tags:
``` python
from tkinter import Tk, messagebox, ttk
# Function to capture username and password
def login():
username = username_entry.get()
password = password_entry.get()
messagebox.showinfo("Login Info", f"Username: {username}\nPassword: {password}")
# Create main window
wndw = Tk()
wndw.title("Login Form")
wndw.geometry("300x200")
# Create frame
frm = ttk.Frame(wndw, padding=20)
frm.pack(expand=True)
# Username field
ttk.Label(frm, text="Username:").pack(pady=5)
username_entry = ttk.Entry(frm, width=25)
username_entry.pack(pady=5)
# Password field (hide input with "show='*'")
ttk.Label(frm, text="Password:").pack(pady=5)
password_entry = ttk.Entry(frm, width=25, show='*')
password_entry.pack(pady=5)
# Login button
ttk.Button(frm, text="LOGIN", command=login).pack(pady=10)
# Start the event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
4f
%% Cell type:code id: tags:
``` python
from tkinter import Tk, messagebox, ttk
class LoginApp:
def __init__(self, root):
self.root = root
self.root.title("Login Form")
self.root.geometry("300x200")
# Create frame
frm = ttk.Frame(root, padding=20)
frm.pack(expand=True)
# Username field
ttk.Label(frm, text="Username:").pack(pady=5)
self.username_entry = ttk.Entry(frm, width=25)
self.username_entry.pack(pady=5)
# Password field
ttk.Label(frm, text="Password:").pack(pady=5)
self.password_entry = ttk.Entry(frm, width=25, show='*')
self.password_entry.pack(pady=5)
# Login button
ttk.Button(frm, text="LOGIN", command=self.login).pack(pady=10)
# Login function
def login(self):
username = self.username_entry.get()
password = self.password_entry.get()
messagebox.showinfo("Login Info", f"Username: {username}\nPassword: {password}")
# Create main window and run the app
if __name__ == "__main__":
root = Tk()
app = LoginApp(root)
root.mainloop()
```
from tkinter import Tk, messagebox, ttk
from datetime import datetime
class Person:
def __init__(self, first_name, surname, dob, gender):
self.first_name = first_name
self.surname = surname
self.dob = dob
self.gender = gender
def get_details(self):
return f"Name: {self.first_name} {self.surname}\nGender: {self.gender}"
def get_age(self):
try:
birth_date = datetime.strptime(self.dob, "%d/%m/%Y")
today = datetime.today()
age = today.year - birth_date.year - ((today.month, today.day) < (birth_date.month, birth_date.day))
return age
except ValueError:
return "Invalid date format"
people = []
def register():
first_name = first_name_entry.get()
surname = surname_entry.get()
gender = gender_var.get()
dob = dob_entry.get()
if not first_name or not surname or not dob or gender == "Select":
messagebox.showwarning("Warning", "Please fill out all fields!")
return
person = Person(first_name, surname, dob, gender)
people.append(person)
messagebox.showinfo("Registration Successful", person.get_details())
def show_total_registrations():
messagebox.showinfo("Total Registrations", f"Total registered users: {len(people)}")
def get_age_of_user():
first_name = first_name_entry.get()
surname = surname_entry.get()
for person in people:
if person.first_name == first_name and person.surname == surname:
age = person.get_age()
messagebox.showinfo("User Age", f"{first_name} {surname} is {age} years old.")
return
messagebox.showerror("Error", "User not found.")
wndw = Tk()
wndw.title("User Registration")
wndw.geometry("400x300")
frm = ttk.Frame(wndw, padding=20)
frm.pack(expand=True)
ttk.Label(frm, text="First Name:").pack(pady=5)
first_name_entry = ttk.Entry(frm, width=30)
first_name_entry.pack(pady=5)
ttk.Label(frm, text="Surname:").pack(pady=5)
surname_entry = ttk.Entry(frm, width=30)
surname_entry.pack(pady=5)
ttk.Label(frm, text="Gender:").pack(pady=5)
gender_var = ttk.Combobox(frm, values=["Male", "Female", "Other"], width=27)
gender_var.pack(pady=5)
gender_var.set("Select")
ttk.Label(frm, text="Date of Birth (DD/MM/YYYY):").pack(pady=5)
dob_entry = ttk.Entry(frm, width=30)
dob_entry.pack(pady=5)
ttk.Button(frm, text="Register", command=register).pack(pady=5)
ttk.Button(frm, text="Total Registrations", command=show_total_registrations).pack(pady=5)
ttk.Button(frm, text="Get Age", command=get_age_of_user).pack(pady=5)
wndw.mainloop()
from tkinter import Tk, ttk
# Create main window
wndw = Tk()
wndw.title("Coursework GUI")
wndw.geometry("500x500")
# Create a Notebook (tabbed interface)
notebook = ttk.Notebook(wndw)
notebook.pack(expand=True, fill='both')
# Home tab
home_frame = ttk.Frame(notebook)
ttk.Label(home_frame, text="Welcome to the Coursework GUI!", font=("Helvetica", 14)).pack(pady=20)
notebook.add(home_frame, text="Home")
# Registration tab
registration_frame = ttk.Frame(notebook)
ttk.Label(registration_frame, text="User Registration", font=("Helvetica", 14)).pack(pady=20)
notebook.add(registration_frame, text="Registration")
# About tab
about_frame = ttk.Frame(notebook)
ttk.Label(about_frame, text="About this application", font=("Helvetica", 14)).pack(pady=20)
notebook.add(about_frame, text="About")
# Registration form elements
ttk.Label(registration_frame, text="First Name:").pack(pady=5)
first_name_entry = ttk.Entry(registration_frame, width=30)
first_name_entry.pack(pady=5)
ttk.Label(registration_frame, text="Surname:").pack(pady=5)
surname_entry = ttk.Entry(registration_frame, width=30)
surname_entry.pack(pady=5)
ttk.Label(registration_frame, text="Gender:").pack(pady=5)
gender_var = ttk.Combobox(registration_frame, values=["Male", "Female", "Other"], width=27)
gender_var.pack(pady=5)
gender_var.set("Select")
ttk.Label(registration_frame, text="Date of Birth (DD/MM/YYYY):").pack(pady=5)
dob_entry = ttk.Entry(registration_frame, width=30)
dob_entry.pack(pady=5)
# Register button
def register_user():
first_name = first_name_entry.get()
surname = surname_entry.get()
gender = gender_var.get()
dob = dob_entry.get()
if not first_name or not surname or gender == "Select" or not dob:
ttk.Label(registration_frame, text="Please fill out all fields!", foreground='red').pack(pady=5)
return
ttk.Label(registration_frame, text=f"Registered: {first_name} {surname}").pack(pady=5)
ttk.Button(registration_frame, text="Register", command=register_user).pack(pady=10)
# About content
ttk.Label(about_frame, text="This is a sample coursework GUI.\nBuilt using Python Tkinter.", justify='center').pack(pady=20)
# Start the Tkinter event loop
wndw.mainloop()
from tkinter import *
import json
# Main window
window = Tk()
window.title("Staff Members")
# Listbox and scrollbar
lstName = Listbox(window, width=15, height=10)
yscroll = Scrollbar(window, command=lstName.yview)
yscroll.grid(row=0, column=3, sticky=NS, rowspan=3)
lstName.config(yscrollcommand=yscroll.set)
lstName.grid(row=0, column=0, sticky=W, columnspan=2, rowspan=3)
# Text field to display staff details
txt = Text(window, width=30, height=10)
txt.grid(row=0, column=5, padx=5, pady=0)
# Load data from JSON file
file_path = r"D:/Học Tập/Năm 2/advanced software development/lab/week10/users.json"
try:
with open(file_path, 'r') as l:
loaded_list = json.load(l)
for line in loaded_list:
staffData = line[0]
lstName.insert('end', staffData)
except FileNotFoundError:
loaded_list = []
# Display selected staff details
def select(evt):
try:
value = lstName.curselection()[0]
templist = loaded_list[value]
txt.delete(1.0, END)
for i in templist:
txt.insert(END, i + '\n')
except IndexError:
pass
lstName.bind('<<ListboxSelect>>', select)
# Add staff member window
def add_staff():
def save_staff():
new_staff = [name_entry.get(), role_entry.get(), office_entry.get(), email_entry.get()]
loaded_list.append(new_staff)
lstName.insert(END, new_staff[0])
with open(file_path, 'w') as f:
json.dump(loaded_list, f)
add_window.destroy()
add_window = Toplevel(window)
add_window.title("Add Staff")
Label(add_window, text="Name:").grid(row=0, column=0)
name_entry = Entry(add_window)
name_entry.grid(row=0, column=1)
Label(add_window, text="Role:").grid(row=1, column=0)
role_entry = Entry(add_window)
role_entry.grid(row=1, column=1)
Label(add_window, text="Office:").grid(row=2, column=0)
office_entry = Entry(add_window)
office_entry.grid(row=2, column=1)
Label(add_window, text="Email:").grid(row=3, column=0)
email_entry = Entry(add_window)
email_entry.grid(row=3, column=1)
Button(add_window, text="Save", command=save_staff).grid(row=4, columnspan=2)
# Remove staff member
def remove_staff():
try:
value = lstName.curselection()[0]
lstName.delete(value)
del loaded_list[value]
with open(file_path, 'w') as f:
json.dump(loaded_list, f)
txt.delete(1.0, END)
except IndexError:
pass
# Buttons for adding and removing staff
Button(window, text="Add Staff", command=add_staff).grid(row=1, column=5, pady=5)
Button(window, text="Remove Staff", command=remove_staff).grid(row=2, column=5, pady=5)
window.mainloop()
%% Cell type:code id: tags:
``` python
import sqlite3
try:
# Connect to (or create) myDB.db
conn = sqlite3.connect('myDB.db')
print("Database created and connected successfully!")
# Commit changes and close
conn.commit()
conn.close()
except sqlite3.Error as e:
print(f"An error occurred: {e}")
```
%% Output
Database created and connected successfully!
%% Cell type:code id: tags:
``` python
import sqlite3
conn = sqlite3.connect('myDB.db')
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS staff (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
position TEXT,
office TEXT,
email TEXT
)''')
cursor.execute("INSERT INTO staff (name, position, office, email) VALUES (?, ?, ?,?)",
('Bob', 'Developer', 'pka','bob@gmail.com'))
conn.commit()
for row in cursor.execute('SELECT * FROM staff'):
print(row)
conn.close()
```
%% Output
(1, 'Bob', 'pka', 'Developer', 'bob@gmail.com')
(2, 'Bob', 'pka', 'Developer', 'bob@gmail.com')
import sqlite3
import json
import tkinter as tk
from tkinter import simpledialog, messagebox
# Step 1: Create and populate the staff table
conn = sqlite3.connect('myDB.db')
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS staff (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
position TEXT,
office TEXT,
email TEXT
)''')
# Load data from users.json
try:
with open('users.json') as f:
data = json.load(f)
for staff in data:
cursor.execute("INSERT INTO staff (name, position, office, email) VALUES (?, ?, ?, ?)", (staff[0], staff[1], staff[2], staff[3]))
conn.commit()
except Exception as e:
print(f"Data insertion error: {e}")
# Step 2: Function to read staff data from the database
def upload():
cursor.execute('SELECT * FROM staff')
return cursor.fetchall()
# Step 3: GUI setup
root = tk.Tk()
root.title("Staff Management")
listbox = tk.Listbox(root, width=50, height=10)
listbox.pack(pady=10)
# Populate the listbox with staff data
for staff in upload():
listbox.insert(tk.END, f"{staff[1]} - {staff[2]} - {staff[3]} - {staff[4]}")
# Add new staff to the database and listbox
def add_staff():
name = simpledialog.askstring("Input", "Enter name:")
position = simpledialog.askstring("Input", "Enter office:")
office = simpledialog.askstring("Input", "Enter position:")
email = simpledialog.askstring("Input", "Enter email:")
if name and position and office and email:
cursor.execute("INSERT INTO staff (name, position, office, email) VALUES (?, ?, ?, ?)",
(name, position, office, email))
conn.commit()
listbox.insert(tk.END, f"{name} - {position} - {office} - {email}")
else:
messagebox.showwarning("Warning", "All fields are required!")
# Remove selected staff from the database and listbox
def remove_staff():
try:
selected_index = listbox.curselection()[0]
selected_item = listbox.get(selected_index)
name = selected_item.split(' - ')[0]
cursor.execute("DELETE FROM staff WHERE name = ?", (name,))
conn.commit()
listbox.delete(selected_index)
except IndexError:
messagebox.showwarning("Warning", "Please select a staff member to remove!")
add_button = tk.Button(root, text="Add", command=add_staff)
add_button.pack(pady=5)
remove_button = tk.Button(root, text="Remove", command=remove_staff)
remove_button.pack(pady=5)
root.mainloop()
conn.close()
import tkinter as tk
from tkinter import messagebox
import sqlite3
# Connect to (or create) the myDB.db database and create the user table if it doesn't exist.
conn = sqlite3.connect("myDB.db")
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS user (.
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE,
password TEXT,
fullname TEXT,
email TEXT
)
''')
conn.commit()
# ---------------------------
# Main Login GUI Setup
# ---------------------------
root = tk.Tk()
root.title("Login")
# Username label and entry
tk.Label(root, text="Username:").grid(row=0, column=0, padx=5, pady=5)
username_entry = tk.Entry(root)
username_entry.grid(row=0, column=1, padx=5, pady=5)
# Password label and entry
tk.Label(root, text="Password:").grid(row=1, column=0, padx=5, pady=5)
password_entry = tk.Entry(root, show="*")
password_entry.grid(row=1, column=1, padx=5, pady=5)
def login():
"""Checks login credentials against the database."""
username = username_entry.get()
password = password_entry.get()
cursor.execute("SELECT * FROM user WHERE username = ? AND password = ?", (username, password))
result = cursor.fetchone()
if result:
messagebox.showinfo("Login", "Login successful!")
else:
messagebox.showwarning("Login", "Invalid credentials.\nIf you are not registered, please click Register.")
def open_register():
"""Opens a new window to capture new user details and register the user."""
reg_window = tk.Toplevel(root)
reg_window.title("Register")
# Four text fields: username, password, full name, and email
tk.Label(reg_window, text="Username:").grid(row=0, column=0, padx=5, pady=5)
reg_username = tk.Entry(reg_window)
reg_username.grid(row=0, column=1, padx=5, pady=5)
tk.Label(reg_window, text="Password:").grid(row=1, column=0, padx=5, pady=5)
reg_password = tk.Entry(reg_window, show="*")
reg_password.grid(row=1, column=1, padx=5, pady=5)
tk.Label(reg_window, text="Full Name:").grid(row=2, column=0, padx=5, pady=5)
reg_fullname = tk.Entry(reg_window)
reg_fullname.grid(row=2, column=1, padx=5, pady=5)
tk.Label(reg_window, text="Email:").grid(row=3, column=0, padx=5, pady=5)
reg_email = tk.Entry(reg_window)
reg_email.grid(row=3, column=1, padx=5, pady=5)
def register_user():
"""Insert the new user record into the database."""
username = reg_username.get()
password = reg_password.get()
fullname = reg_fullname.get()
email = reg_email.get()
if username and password and fullname and email:
try:
cursor.execute("INSERT INTO user (username, password, fullname, email) VALUES (?, ?, ?, ?)",
(username, password, fullname, email))
conn.commit()
messagebox.showinfo("Registration", "Registration successful!")
reg_window.destroy()
except sqlite3.IntegrityError:
messagebox.showerror("Registration", "Username already exists!\nPlease choose another username.")
else:
messagebox.showwarning("Registration", "All fields are required!")
# Two buttons: OK (to register) and Cancel (to abort registration)
tk.Button(reg_window, text="OK", command=register_user).grid(row=4, column=0, padx=5, pady=5)
tk.Button(reg_window, text="Cancel", command=reg_window.destroy).grid(row=4, column=1, padx=5, pady=5)
# Main window buttons for Login and Register
tk.Button(root, text="Login", command=login).grid(row=2, column=0, padx=5, pady=5)
tk.Button(root, text="Register", command=open_register).grid(row=2, column=1, padx=5, pady=5)
root.mainloop()
conn.close()
import tkinter as tk
from tkinter import ttk, messagebox
class TabbedLoginApp:
def __init__(self, root):
self.root = root
self.root.title("Tabbed Login Application")
# Create the notebook (tabs container)
self.notebook = ttk.Notebook(self.root)
self.notebook.pack(fill='both', expand=True)
# Create Login tab
self.login_frame = ttk.Frame(self.notebook)
self.notebook.add(self.login_frame, text="Login")
self.create_login_tab(self.login_frame)
# Create Data tab (for tabulated data)
self.data_frame = ttk.Frame(self.notebook)
self.notebook.add(self.data_frame, text="Data")
self.create_data_tab(self.data_frame)
def create_login_tab(self, frame):
# Username label and entry
ttk.Label(frame, text="Username:").grid(row=0, column=0, padx=10, pady=10, sticky='e')
self.entry_username = ttk.Entry(frame)
self.entry_username.grid(row=0, column=1, padx=10, pady=10)
# Password label and entry
ttk.Label(frame, text="Password:").grid(row=1, column=0, padx=10, pady=10, sticky='e')
self.entry_password = ttk.Entry(frame, show="*")
self.entry_password.grid(row=1, column=1, padx=10, pady=10)
# Login button
login_button = ttk.Button(frame, text="Login", command=self.login)
login_button.grid(row=2, column=0, columnspan=2, pady=10)
# Register button (opens registration window)
register_button = ttk.Button(frame, text="Register", command=self.open_register)
register_button.grid(row=3, column=0, columnspan=2, pady=5)
def login(self):
# Simple login validation (replace with actual credential checking as needed)
username = self.entry_username.get()
password = self.entry_password.get()
if username == "admin" and password == "password":
messagebox.showinfo("Login", "Login successful!")
else:
messagebox.showwarning("Login", "Invalid credentials!\nPlease try again or register.")
def open_register(self):
# Registration window for capturing new user details
reg_window = tk.Toplevel(self.root)
reg_window.title("Register")
ttk.Label(reg_window, text="Username:").grid(row=0, column=0, padx=10, pady=5, sticky='e')
reg_username = ttk.Entry(reg_window)
reg_username.grid(row=0, column=1, padx=10, pady=5)
ttk.Label(reg_window, text="Password:").grid(row=1, column=0, padx=10, pady=5, sticky='e')
reg_password = ttk.Entry(reg_window, show="*")
reg_password.grid(row=1, column=1, padx=10, pady=5)
ttk.Label(reg_window, text="Full Name:").grid(row=2, column=0, padx=10, pady=5, sticky='e')
reg_fullname = ttk.Entry(reg_window)
reg_fullname.grid(row=2, column=1, padx=10, pady=5)
ttk.Label(reg_window, text="Email:").grid(row=3, column=0, padx=10, pady=5, sticky='e')
reg_email = ttk.Entry(reg_window)
reg_email.grid(row=3, column=1, padx=10, pady=5)
def submit_registration():
# For demo purposes, just validate and show a message.
username = reg_username.get()
password = reg_password.get()
fullname = reg_fullname.get()
email = reg_email.get()
if username and password and fullname and email:
messagebox.showinfo("Registration", "Registration successful!")
reg_window.destroy()
else:
messagebox.showwarning("Registration", "All fields are required!")
submit_button = ttk.Button(reg_window, text="Submit", command=submit_registration)
submit_button.grid(row=4, column=0, padx=10, pady=10)
cancel_button = ttk.Button(reg_window, text="Cancel", command=reg_window.destroy)
cancel_button.grid(row=4, column=1, padx=10, pady=10)
def create_data_tab(self, frame):
# Create a Treeview widget for displaying tabulated data
columns = ("ID", "Name", "Role")
self.tree = ttk.Treeview(frame, columns=columns, show='headings')
for col in columns:
self.tree.heading(col, text=col)
self.tree.column(col, width=100)
self.tree.pack(fill='both', expand=True, padx=10, pady=10)
# Insert sample data into the table
sample_data = [
(1, "Alice", "Developer"),
(2, "Bob", "Designer"),
(3, "Charlie", "Manager")
]
for item in sample_data:
self.tree.insert("", tk.END, values=item)
def main():
root = tk.Tk()
app = TabbedLoginApp(root)
root.mainloop()
if __name__ == "__main__":
main()
File added
[["Zaheer Khan", "Prof", "3Q31", "zaheer2.khan@uwe.ac.uk"], ["Mehmet Aydin", "Senior Lecturer", "4Q59", "mehmet.aydin@uwe.ac.uk"], ["James Lear", "Lecturer", "4Q59", "james.lear@uwe.ac.uk"], ["Barkha Javed", "Lecturer", "3E40", "barkha.javed@uwe.ac.uk"], ["Elias Pimenides", "Senior Lecturer", "3Q31", "elias.pimenides@uwe.ac.uk"]]
\ No newline at end of file
from tkinter import *
from tkinter import ttk
wndw = Tk()
wndw.title("This is my first TK")
#grid
# frm = ttk.Frame(wndw, padding=100)
# frm.grid()
# ttk.Label(frm, text="Hello World!").grid(column=0, row=0)
# ttk.Button(frm, text="Quit", command=wndw.destroy).grid(column=1,
# row=0)
# wndw.mainloop()
#pack
frm = ttk.Frame(wndw, padding=10)
frm.pack()
ttk.Label(frm, text="Hello World!").pack(side=LEFT, padx=0, pady=100)
ttk.Button(frm, text="Quit", command=wndw.destroy).pack(side=RIGHT, padx=5, pady=5)
wndw.mainloop()
#place
# frm = ttk.Frame(wndw, padding=10)
# frm.place(x=20, y=20) # Specify exact position
# label = ttk.Label(frm, text="Hello World!")
# label.place(x=10, y=10) # Manually set coordinates
# button = ttk.Button(frm, text="Quit", command=wndw.destroy)
# button.place(x=100, y=10) # Manually set coordinates
# wndw.geometry("300x150") # Set window size for better visibility
# wndw.mainloop()
\ No newline at end of file
week8/UWE Bristol.png

23.4 KiB

%% Cell type:markdown id: tags:
3a
%% Cell type:code id: tags:
``` python
from tkinter import Tk
# Create main window
wndw = Tk()
wndw.title("My Empty Window")
# Set window size
wndw.geometry("300x200")
# Start the main event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
3b
%% Cell type:code id: tags:
``` python
from tkinter import Tk
from tkinter import ttk
# Create main window
wndw = Tk()
wndw.title("My Simple GUI")
wndw.geometry("300x200")
# Create frame
frm = ttk.Frame(wndw, padding=10)
frm.grid()
# Add label
ttk.Label(frm, text="Welcome to Tkinter!").grid(column=0, row=0)
# Add button
ttk.Button(frm, text="Hello UWE").grid(column=0, row=1)
# Start the main event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
3c
%% Cell type:code id: tags:
``` python
from tkinter import Tk, messagebox
from tkinter import ttk
# Create main window
wndw = Tk()
wndw.title("Interactive GUI")
wndw.geometry("300x200")
# Function to show message
def show_message():
messagebox.showinfo("Greeting", "Hello UWE!")
# Create frame
frm = ttk.Frame(wndw, padding=10)
frm.grid()
# Add label
ttk.Label(frm, text="Click the button below:").grid(column=0, row=0)
# Add button and link function
ttk.Button(frm, text="Hello UWE", command=show_message).grid(column=0, row=1)
# Start the main event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
3d
%% Cell type:code id: tags:
``` python
from tkinter import Tk, Canvas
# Create main window
wndw = Tk()
wndw.title("Canvas Example")
wndw.geometry("300x200")
# Create canvas
cnvs = Canvas(wndw, width=200, height=150, bg="red")
cnvs.pack(pady=20)
# Start the main event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
3.e, f
%% Cell type:code id: tags:
``` python
from tkinter import Tk, Canvas, PhotoImage
from PIL import Image, ImageTk
# Create main window
wndw = Tk()
wndw.title("Resized Image on Canvas")
wndw.geometry("300x200")
# Open and resize the image
original_image = Image.open("UWE Bristol.png") # Replace with your image path
resized_image = original_image.resize((200, 150)) # Match canvas size
# Convert the resized image to PhotoImage
uwe_logo = ImageTk.PhotoImage(resized_image)
# Create canvas
cnvs = Canvas(wndw, width=200, height=150)
cnvs.pack()
# Add image to canvas
cnvs.create_image(100, 75, image=uwe_logo) # Center of canvas
# Start the main event loop
wndw.mainloop()
```
%% Cell type:code id: tags:
``` python
from tkinter import Tk, Canvas, messagebox, ttk
from PIL import Image, ImageTk # For image resizing
# Function to show a message when button is clicked
def show_message():
messagebox.showinfo("Greeting", "Hello UWE!")
# Create main window
wndw = Tk()
wndw.title("Complete GUI Example")
wndw.geometry("400x300") # Adjusted size for better layout
# Create a frame for better organization
frm = ttk.Frame(wndw, padding=10)
frm.grid()
# Add a label
ttk.Label(frm, text="Welcome to My Tkinter GUI!").grid(column=0, row=0, columnspan=2)
# Add a button that shows a message when clicked
ttk.Button(frm, text="Hello UWE", command=show_message).grid(column=0, row=1)
# Create canvas
canvas_width = 200
canvas_height = 150
cnvs = Canvas(frm, width=canvas_width, height=canvas_height, bg="red")
cnvs.grid(column=1, row=1, padx=10, pady=10) # Position next to button
# Load and resize image (make sure "uwe_logo.png" exists in the same directory)
original_image = Image.open("UWE Bristol.png") # Replace with your image file
resized_image = original_image.resize((canvas_width, canvas_height)) # Resize to fit canvas
uwe_logo = ImageTk.PhotoImage(resized_image)
# Add image to canvas
cnvs.create_image(canvas_width // 2, canvas_height // 2, image=uwe_logo)
# Start the main event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
4a
%% Cell type:code id: tags:
``` python
from tkinter import Tk, ttk
# Create main window
wndw = Tk()
wndw.title("Search Example")
wndw.geometry("300x150") # Set window size
# Create a frame
frm = ttk.Frame(wndw, padding=10)
frm.grid()
# Add a text field (Entry widget)
entry = ttk.Entry(frm, width=20)
entry.grid(column=0, row=0, padx=5, pady=5)
# Add a button (doesn't do anything yet)
ttk.Button(frm, text="SEARCH").grid(column=1, row=0, padx=5, pady=5)
# Start the event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
4b
%% Cell type:code id: tags:
``` python
from tkinter import Tk, messagebox, ttk
# Function to capture and display text
def show_input():
user_input = entry.get() # Get text from entry field
messagebox.showinfo("Your Input", f"You entered: {user_input}")
# Create main window
wndw = Tk()
wndw.title("Search Example")
wndw.geometry("300x150")
# Create a frame
frm = ttk.Frame(wndw, padding=10)
frm.grid()
# Add a text field
entry = ttk.Entry(frm, width=20)
entry.grid(column=0, row=0, padx=5, pady=5)
# Add a button that captures input
ttk.Button(frm, text="SEARCH", command=show_input).grid(column=1, row=0, padx=5, pady=5)
# Start the event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
4c. improve 4b
%% Cell type:code id: tags:
``` python
from tkinter import Tk, messagebox, ttk
# Function to capture and display text
def show_input():
user_input = entry.get()
messagebox.showinfo("Your Input", f"You entered: {user_input}")
# Create main window
wndw = Tk()
wndw.title("Enhanced GUI")
wndw.geometry("400x200")
# Create main frame
main_frame = ttk.Frame(wndw, padding=20)
main_frame.pack(expand=True)
# Add label
ttk.Label(main_frame, text="Enter something and click SEARCH:").pack(pady=5)
# Add text entry
entry = ttk.Entry(main_frame, width=30)
entry.pack(pady=5)
# Add button
ttk.Button(main_frame, text="SEARCH", command=show_input).pack(pady=5)
# Start the event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
4d, e
%% Cell type:code id: tags:
``` python
from tkinter import Tk, messagebox, ttk
# Function to capture username and password
def login():
username = username_entry.get()
password = password_entry.get()
messagebox.showinfo("Login Info", f"Username: {username}\nPassword: {password}")
# Create main window
wndw = Tk()
wndw.title("Login Form")
wndw.geometry("300x200")
# Create frame
frm = ttk.Frame(wndw, padding=20)
frm.pack(expand=True)
# Username field
ttk.Label(frm, text="Username:").pack(pady=5)
username_entry = ttk.Entry(frm, width=25)
username_entry.pack(pady=5)
# Password field (hide input with "show='*'")
ttk.Label(frm, text="Password:").pack(pady=5)
password_entry = ttk.Entry(frm, width=25, show='*')
password_entry.pack(pady=5)
# Login button
ttk.Button(frm, text="LOGIN", command=login).pack(pady=10)
# Start the event loop
wndw.mainloop()
```
%% Cell type:markdown id: tags:
4f
%% Cell type:code id: tags:
``` python
from tkinter import Tk, messagebox, ttk
class LoginApp:
def __init__(self, root):
self.root = root
self.root.title("Login Form")
self.root.geometry("300x200")
# Create frame
frm = ttk.Frame(root, padding=20)
frm.pack(expand=True)
# Username field
ttk.Label(frm, text="Username:").pack(pady=5)
self.username_entry = ttk.Entry(frm, width=25)
self.username_entry.pack(pady=5)
# Password field
ttk.Label(frm, text="Password:").pack(pady=5)
self.password_entry = ttk.Entry(frm, width=25, show='*')
self.password_entry.pack(pady=5)
# Login button
ttk.Button(frm, text="LOGIN", command=self.login).pack(pady=10)
# Login function
def login(self):
username = self.username_entry.get()
password = self.password_entry.get()
messagebox.showinfo("Login Info", f"Username: {username}\nPassword: {password}")
# Create main window and run the app
if __name__ == "__main__":
root = Tk()
app = LoginApp(root)
root.mainloop()
```
from tkinter import Tk, messagebox, ttk
from datetime import datetime
class Person:
def __init__(self, first_name, surname, dob, gender):
self.first_name = first_name
self.surname = surname
self.dob = dob
self.gender = gender
def get_details(self):
return f"Name: {self.first_name} {self.surname}\nGender: {self.gender}"
def get_age(self):
try:
birth_date = datetime.strptime(self.dob, "%d/%m/%Y")
today = datetime.today()
age = today.year - birth_date.year - ((today.month, today.day) < (birth_date.month, birth_date.day))
return age
except ValueError:
return "Invalid date format"
people = []
def register():
first_name = first_name_entry.get()
surname = surname_entry.get()
gender = gender_var.get()
dob = dob_entry.get()
if not first_name or not surname or not dob or gender == "Select":
messagebox.showwarning("Warning", "Please fill out all fields!")
return
person = Person(first_name, surname, dob, gender)
people.append(person)
messagebox.showinfo("Registration Successful", person.get_details())
def show_total_registrations():
messagebox.showinfo("Total Registrations", f"Total registered users: {len(people)}")
def get_age_of_user():
first_name = first_name_entry.get()
surname = surname_entry.get()
for person in people:
if person.first_name == first_name and person.surname == surname:
age = person.get_age()
messagebox.showinfo("User Age", f"{first_name} {surname} is {age} years old.")
return
messagebox.showerror("Error", "User not found.")
wndw = Tk()
wndw.title("User Registration")
wndw.geometry("400x300")
frm = ttk.Frame(wndw, padding=20)
frm.pack(expand=True)
ttk.Label(frm, text="First Name:").pack(pady=5)
first_name_entry = ttk.Entry(frm, width=30)
first_name_entry.pack(pady=5)
ttk.Label(frm, text="Surname:").pack(pady=5)
surname_entry = ttk.Entry(frm, width=30)
surname_entry.pack(pady=5)
ttk.Label(frm, text="Gender:").pack(pady=5)
gender_var = ttk.Combobox(frm, values=["Male", "Female", "Other"], width=27)
gender_var.pack(pady=5)
gender_var.set("Select")
ttk.Label(frm, text="Date of Birth (DD/MM/YYYY):").pack(pady=5)
dob_entry = ttk.Entry(frm, width=30)
dob_entry.pack(pady=5)
ttk.Button(frm, text="Register", command=register).pack(pady=5)
ttk.Button(frm, text="Total Registrations", command=show_total_registrations).pack(pady=5)
ttk.Button(frm, text="Get Age", command=get_age_of_user).pack(pady=5)
wndw.mainloop()
from tkinter import Tk, ttk
# Create main window
wndw = Tk()
wndw.title("Coursework GUI")
wndw.geometry("500x500")
# Create a Notebook (tabbed interface)
notebook = ttk.Notebook(wndw)
notebook.pack(expand=True, fill='both')
# Home tab
home_frame = ttk.Frame(notebook)
ttk.Label(home_frame, text="Welcome to the Coursework GUI!", font=("Helvetica", 14)).pack(pady=20)
notebook.add(home_frame, text="Home")
# Registration tab
registration_frame = ttk.Frame(notebook)
ttk.Label(registration_frame, text="User Registration", font=("Helvetica", 14)).pack(pady=20)
notebook.add(registration_frame, text="Registration")
# About tab
about_frame = ttk.Frame(notebook)
ttk.Label(about_frame, text="About this application", font=("Helvetica", 14)).pack(pady=20)
notebook.add(about_frame, text="About")
# Registration form elements
ttk.Label(registration_frame, text="First Name:").pack(pady=5)
first_name_entry = ttk.Entry(registration_frame, width=30)
first_name_entry.pack(pady=5)
ttk.Label(registration_frame, text="Surname:").pack(pady=5)
surname_entry = ttk.Entry(registration_frame, width=30)
surname_entry.pack(pady=5)
ttk.Label(registration_frame, text="Gender:").pack(pady=5)
gender_var = ttk.Combobox(registration_frame, values=["Male", "Female", "Other"], width=27)
gender_var.pack(pady=5)
gender_var.set("Select")
ttk.Label(registration_frame, text="Date of Birth (DD/MM/YYYY):").pack(pady=5)
dob_entry = ttk.Entry(registration_frame, width=30)
dob_entry.pack(pady=5)
# Register button
def register_user():
first_name = first_name_entry.get()
surname = surname_entry.get()
gender = gender_var.get()
dob = dob_entry.get()
if not first_name or not surname or gender == "Select" or not dob:
ttk.Label(registration_frame, text="Please fill out all fields!", foreground='red').pack(pady=5)
return
ttk.Label(registration_frame, text=f"Registered: {first_name} {surname}").pack(pady=5)
ttk.Button(registration_frame, text="Register", command=register_user).pack(pady=10)
# About content
ttk.Label(about_frame, text="This is a sample coursework GUI.\nBuilt using Python Tkinter.", justify='center').pack(pady=20)
# Start the Tkinter event loop
wndw.mainloop()
from tkinter import *
import json
# Main window
window = Tk()
window.title("Staff Members")
# Listbox and scrollbar
lstName = Listbox(window, width=15, height=10)
yscroll = Scrollbar(window, command=lstName.yview)
yscroll.grid(row=0, column=3, sticky=NS, rowspan=3)
lstName.config(yscrollcommand=yscroll.set)
lstName.grid(row=0, column=0, sticky=W, columnspan=2, rowspan=3)
# Text field to display staff details
txt = Text(window, width=30, height=10)
txt.grid(row=0, column=5, padx=5, pady=0)
# Load data from JSON file
file_path = r"D:/Học Tập/Năm 2/advanced software development/lab/week9/users.json"
try:
with open(file_path, 'r') as l:
loaded_list = json.load(l)
for line in loaded_list:
staffData = line[0]
lstName.insert('end', staffData)
except FileNotFoundError:
loaded_list = []
# Display selected staff details
def select(evt):
try:
value = lstName.curselection()[0]
templist = loaded_list[value]
txt.delete(1.0, END)
for i in templist:
txt.insert(END, i + '\n')
except IndexError:
pass
lstName.bind('<<ListboxSelect>>', select)
# Add staff member window
def add_staff():
def save_staff():
new_staff = [name_entry.get(), role_entry.get(), office_entry.get(), email_entry.get()]
loaded_list.append(new_staff)
lstName.insert(END, new_staff[0])
with open(file_path, 'w') as f:
json.dump(loaded_list, f)
add_window.destroy()
add_window = Toplevel(window)
add_window.title("Add Staff")
Label(add_window, text="Name:").grid(row=0, column=0)
name_entry = Entry(add_window)
name_entry.grid(row=0, column=1)
Label(add_window, text="Role:").grid(row=1, column=0)
role_entry = Entry(add_window)
role_entry.grid(row=1, column=1)
Label(add_window, text="Office:").grid(row=2, column=0)
office_entry = Entry(add_window)
office_entry.grid(row=2, column=1)
Label(add_window, text="Email:").grid(row=3, column=0)
email_entry = Entry(add_window)
email_entry.grid(row=3, column=1)
Button(add_window, text="Save", command=save_staff).grid(row=4, columnspan=2)
# Remove staff member
def remove_staff():
try:
value = lstName.curselection()[0]
lstName.delete(value)
del loaded_list[value]
with open(file_path, 'w') as f:
json.dump(loaded_list, f)
txt.delete(1.0, END)
except IndexError:
pass
# Buttons for adding and removing staff
Button(window, text="Add Staff", command=add_staff).grid(row=1, column=5, pady=5)
Button(window, text="Remove Staff", command=remove_staff).grid(row=2, column=5, pady=5)
window.mainloop()