Я работаю над проектом Tkinter, в котором у меня есть экран входа в систему с фоновым изображением. Я хочу сделать поля ввода «Имя пользователя» и «Пароль» прозрачными, чтобы за ними было видно фоновое изображение. Кроме того, я хотел бы, чтобы кнопки «Войти» и «Регистрация» также имели прозрачный фон, но не влияя на их функциональность.
Я попробовал использовать опцию bg="transparent" для полей ввода и кнопок, но у меня возникла ошибка, поскольку Tkinter напрямую не поддерживает прозрачный фон.
введите здесь описание изображения
Вот код фрагмент моей текущей настройки:
import tkinter as tk
from tkinter import messagebox
import sqlite3
from PIL import Image, ImageTk # Pillow modülünü içeri aktar
def setup_database():
conn = sqlite3.connect("todo_app.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
password TEXT NOT NULL
)
""")
cursor.execute("""
CREATE TABLE IF NOT EXISTS tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
task TEXT NOT NULL,
completed BOOLEAN NOT NULL DEFAULT 0,
FOREIGN KEY(user_id) REFERENCES users(id)
)
""")
conn.commit()
conn.close()
def login_screen():
def login():
username = username_entry.get()
password = password_entry.get()
conn = sqlite3.connect("todo_app.db")
cursor = conn.cursor()
cursor.execute("SELECT id FROM users WHERE username = ? AND password = ?", (username, password))
user = cursor.fetchone()
conn.close()
if user:
messagebox.showinfo("Başarılı", "Hoşgeldiniz Lordum!")
main_screen(user[0]) # Kullanıcı ID'sini ana ekrana gönder
else:
messagebox.showerror("Hata", "Kullanıcı adı veya şifre yanlış!")
def register():
username = username_entry.get()
password = password_entry.get()
if username and password:
conn = sqlite3.connect("todo_app.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password))
conn.commit()
conn.close()
messagebox.showinfo("Başarılı", "Kayıt başarılı! Giriş yapabilirsiniz.")
else:
messagebox.showerror("Hata", "Kullanıcı adı ve şifre boş olamaz!")
root = tk.Tk()
root.title("Giriş Yap")
width, height = 200, 200
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = (screen_width - width) // 2
y = (screen_height - height) // 2
root.geometry(f"{width}x{height}+{x}+{y}")
background_image = Image.open("loginbackground.png") # Resmi yükle
background_image = background_image.resize((width, height))
background_photo = ImageTk.PhotoImage(background_image)
background_label = tk.Label(root, image=background_photo)
background_label.place(relwidth=1, relheight=1)
login_frame = tk.Frame(root, bg='white')
login_frame.place(relx=0.5, rely=0.5, anchor="center")
tk.Label(login_frame, text="Kullanıcı Adı:", fg="black", bg="white").pack(pady=5)
username_entry = tk.Entry(login_frame, bd=0, relief="flat", highlightthickness=0) # Borderless entry
username_entry.pack(pady=5)
tk.Label(login_frame, text="Şifre:", fg="black", bg="white").pack(pady=5)
password_entry = tk.Entry(login_frame, show="*", bd=0, relief="flat", highlightthickness=0) # Borderless entry
password_entry.pack(pady=5)
tk.Button(login_frame, text="Giriş Yap", command=login, bd=0, relief="flat", bg="#d3d3d3").pack(pady=5)
tk.Button(login_frame, text="Kayıt Ol", command=register, bd=0, relief="flat", bg="#d3d3d3").pack(pady=5)
root.mainloop()
def main_screen(user_id):
def add_task():
task = task_entry.get()
if task:
conn = sqlite3.connect("todo_app.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO tasks (user_id, task) VALUES (?, ?)", (user_id, task))
conn.commit()
conn.close()
task_entry.delete(0, tk.END)
load_tasks()
else:
messagebox.showerror("Hata", "Görev boş olamaz!")
def delete_task(task_id):
conn = sqlite3.connect("todo_app.db")
cursor = conn.cursor()
cursor.execute("DELETE FROM tasks WHERE id = ?", (task_id,))
conn.commit()
conn.close()
load_tasks()
def load_tasks():
for widget in task_frame.winfo_children():
widget.destroy()
conn = sqlite3.connect("todo_app.db")
cursor = conn.cursor()
cursor.execute("SELECT id, task FROM tasks WHERE user_id = ?", (user_id,))
tasks = cursor.fetchall()
conn.close()
for task_id, task in tasks:
frame = tk.Frame(task_frame)
frame.pack(fill="x", pady=2)
tk.Label(frame, text=task).pack(side="left", padx=5)
tk.Button(frame, text="Sil", command=lambda tid=task_id: delete_task(tid)).pack(side="right")
root = tk.Tk()
root.title("Yapılacaklar Listesi")
width, height = 800, 600
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = (screen_width - width) // 2
y = (screen_height - height) // 2
root.geometry(f"{width}x{height}+{x}+{y}")
task_entry = tk.Entry(root)
task_entry.pack(pady=5)
tk.Button(root, text="Ekle", command=add_task).pack(pady=5)
task_frame = tk.Frame(root)
task_frame.pack(pady=10)
load_tasks()
root.mainloop()
# Programı başlat
if __name__ == "__main__":
setup_database()
login_screen()
Что я пробовал: я пробовал использовать параметр bg="transparent" для виджетов «Ввод» и «Кнопка» в Tkinter, надеясь сделать их прозрачными. Я также удалил границы и установил для их свойства рельефа значение «плоский». Кроме того, я использовал библиотеку Pillow, чтобы добавить фоновое изображение в окно Tkinter. Я также попытался удалить цвет фона этих виджетов по умолчанию и поэкспериментировал с установкой различных свойств, таких как bd=0 и highlightthickness=0.
Чего я ожидал: я ожидал, что поля ввода будут «Имя пользователя» и «Пароль» должны быть прозрачными, чтобы за ними было видно фоновое изображение. Точно так же я ожидал, что кнопки «Войти» и «Регистрация» будут иметь прозрачный фон, чтобы фоновое изображение окна также отображалось через эти элементы пользовательского интерфейса.
Однако даже после применения этих элементов изменения, я по-прежнему вижу белый фон за полями ввода и кнопками, а это не то поведение, которое я ожидал.
Я работаю над проектом Tkinter, в котором у меня есть экран входа в систему с фоновым изображением. Я хочу сделать поля ввода «Имя пользователя» и «Пароль» прозрачными, чтобы за ними было видно фоновое изображение. Кроме того, я хотел бы, чтобы кнопки «Войти» и «Регистрация» также имели прозрачный фон, но не влияя на их функциональность. Я попробовал использовать опцию bg="transparent" для полей ввода и кнопок, но у меня возникла ошибка, поскольку Tkinter напрямую не поддерживает прозрачный фон. введите здесь описание изображения Вот код фрагмент моей текущей настройки: [code]import tkinter as tk from tkinter import messagebox import sqlite3 from PIL import Image, ImageTk # Pillow modülünü içeri aktar
def setup_database(): conn = sqlite3.connect("todo_app.db") cursor = conn.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL, password TEXT NOT NULL ) """) cursor.execute(""" CREATE TABLE IF NOT EXISTS tasks ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, task TEXT NOT NULL, completed BOOLEAN NOT NULL DEFAULT 0, FOREIGN KEY(user_id) REFERENCES users(id) ) """) conn.commit() conn.close()
def login_screen(): def login(): username = username_entry.get() password = password_entry.get() conn = sqlite3.connect("todo_app.db") cursor = conn.cursor() cursor.execute("SELECT id FROM users WHERE username = ? AND password = ?", (username, password)) user = cursor.fetchone() conn.close()
if user: messagebox.showinfo("Başarılı", "Hoşgeldiniz Lordum!") main_screen(user[0]) # Kullanıcı ID'sini ana ekrana gönder else: messagebox.showerror("Hata", "Kullanıcı adı veya şifre yanlış!")
def register(): username = username_entry.get() password = password_entry.get() if username and password: conn = sqlite3.connect("todo_app.db") cursor = conn.cursor() cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password)) conn.commit() conn.close() messagebox.showinfo("Başarılı", "Kayıt başarılı! Giriş yapabilirsiniz.") else: messagebox.showerror("Hata", "Kullanıcı adı ve şifre boş olamaz!")
# Programı başlat if __name__ == "__main__": setup_database() login_screen()
[/code] Что я пробовал: я пробовал использовать параметр bg="transparent" для виджетов «Ввод» и «Кнопка» в Tkinter, надеясь сделать их прозрачными. Я также удалил границы и установил для их свойства рельефа значение «плоский». Кроме того, я использовал библиотеку Pillow, чтобы добавить фоновое изображение в окно Tkinter. Я также попытался удалить цвет фона этих виджетов по умолчанию и поэкспериментировал с установкой различных свойств, таких как bd=0 и highlightthickness=0. Чего я ожидал: я ожидал, что поля ввода будут «Имя пользователя» и «Пароль» должны быть прозрачными, чтобы за ними было видно фоновое изображение. Точно так же я ожидал, что кнопки «Войти» и «Регистрация» будут иметь прозрачный фон, чтобы фоновое изображение окна также отображалось через эти элементы пользовательского интерфейса. Однако даже после применения этих элементов изменения, я по-прежнему вижу белый фон за полями ввода и кнопками, а это не то поведение, которое я ожидал.