есть код на python , нужно сделать так чтоб был поиск уже созданном окне ,,Окно поиска,,
выписывал значения , выводится полностью все , а должно именно конкретное , также не работает поиск никакой кроме id.
скрин предоставлен где ошибка:
import tkinter as tk
from tkinter import ttk, messagebox, filedialog
import sqlite3
import pandas as pd
class SearchWindow(tk.Toplevel):
def __init__(self, master, search_callback, conn):
super().__init__(master)
self.title("Окно поиска")
self.transient(master)
self.grab_set()
self.search_callback = search_callback
self.conn = conn
self.create_widgets()
def create_widgets(self):
self.label = tk.Label(self, text="Введите значения для поиска:")
self.label.grid(row=0, column=0, padx=10, pady=10, sticky="w")
self.filters = {
"ID": tk.StringVar(),
"Город": tk.StringVar(),
"Температура": tk.StringVar(),
"Погода": tk.StringVar(),
"Скорость ветра": tk.StringVar(),
}
row_num = 1
for criteria, var in self.filters.items():
label = tk.Label(self, text=criteria)
label.grid(row=row_num, column=0, padx=10, pady=5, sticky="w")
entry = tk.Entry(self, textvariable=var)
entry.grid(row=row_num, column=1, padx=10, pady=5, sticky="w")
row_num += 1
self.search_button = tk.Button(self, text="Выполнить поиск", command=self.perform_search)
self.search_button.grid(row=row_num, column=0, columnspan=2, padx=10, pady=10, sticky="w")
# Добавим Treeview для отображения результатов поиска
self.tree = ttk.Treeview(self, columns=("ID", "Город", "Температура", "Погода", "Скорость ветра"), show="headings")
self.tree.heading("ID", text="ID")
self.tree.heading("Город", text="Город")
self.tree.heading("Температура", text="Температура")
self.tree.heading("Погода", text="Погода")
self.tree.heading("Скорость ветра", text="Скорость ветра")
self.tree.grid(row=row_num + 1, column=0, columnspan=2, pady=10, padx=10, sticky="w")
def perform_search(self):
filter_values = {criteria: var.get() for criteria, var in self.filters.items()}
# Очистить предыдущие данные в Treeview
for row in self.tree.get_children():
self.tree.delete(row)
# Поиск данных по всем критериям
cursor = self.conn.cursor()
query = "SELECT * FROM weather WHERE "
conditions = []
for criteria, value in filter_values.items():
if value:
conditions.append(f"{criteria} LIKE ?")
cursor.execute(query + " AND ".join(conditions), ['%' + value + '%'])
data = cursor.fetchall()
if data:
for row in data:
self.tree.insert("", "end", values=row)
else:
messagebox.showinfo("Данные о погоде", "Нет данных для введенных значений")
class WeatherApp:
def __init__(self, master):
self.master = master
self.master.title("Погодное приложение")
self.create_widgets()
# Подключение к базе данных
self.conn = sqlite3.connect("weather.db")
self.create_table()
def create_widgets(self):
self.label = tk.Label(self.master, text="Погодное приложение", font=("Helvetica", 16))
self.label.grid(row=0, column=0, columnspan=3, pady=10, sticky="w")
self.data_menu = tk.Menu(self.master, tearoff=0)
self.data_menu.add_command(label="Вывести все данные", command=self.show_all_data)
self.data_menu.add_separator()
self.data_menu.add_command(label="Экспорт в Excel", command=self.export_to_excel)
self.data_menu.add_command(label="Импорт из Excel", command=self.import_from_excel)
self.data_button = tk.Button(self.master, text="Данные", command=self.show_menu)
self.data_button.grid(row=1, column=0, pady=5, padx=10, sticky="w")
self.search_entry = tk.Entry(self.master, width=30)
self.search_entry.grid(row=2, column=0, pady=5, padx=10, sticky="w")
self.search_button = tk.Button(self.master, text="Поиск по городу", command=self.search_by_city)
self.search_button.grid(row=2, column=1, pady=5, padx=10, sticky="w")
self.search_window_button = tk.Button(self.master, text="Открыть окно поиска", command=self.open_search_window)
self.search_window_button.grid(row=2, column=2, pady=5, padx=10, sticky="w")
self.tree = ttk.Treeview(self.master, columns=("ID", "Город", "Температура", "Погода", "Скорость ветра"), show="headings")
self.tree.heading("ID", text="ID")
self.tree.heading("Город", text="Город")
self.tree.heading("Температура", text="Температура")
self.tree.heading("Погода", text="Погода")
self.tree.heading("Скорость ветра", text="Скорость ветра")
self.tree.grid(row=3, column=0, columnspan=3, pady=20, padx=10, sticky="w")
def create_table(self):
cursor = self.conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS weather (
id INTEGER PRIMARY KEY AUTOINCREMENT,
city TEXT NOT NULL,
temperature INTEGER,
weather_conditions TEXT,
wind_speed INTEGER
)
''')
self.conn.commit()
def show_all_data(self):
for row in self.tree.get_children():
self.tree.delete(row)
cursor = self.conn.cursor()
cursor.execute("SELECT * FROM weather")
data = cursor.fetchall()
if data:
for row in data:
self.tree.insert("", "end", values=row)
else:
messagebox.showinfo("Данные о погоде", "Нет данных о погоде")
def search_by_city(self):
for row in self.tree.get_children():
self.tree.delete(row)
city = self.search_entry.get()
cursor = self.conn.cursor()
cursor.execute("SELECT * FROM weather WHERE city=?", (city,))
data = cursor.fetchall()
if data:
for row in data:
self.tree.insert("", "end", values=row)
else:
messagebox.showinfo("Данные о погоде", f"Нет данных о погоде для города {city}")
def show_menu(self):
self.data_menu.post(self.data_button.winfo_rootx(), self.data_button.winfo_rooty() + self.data_button.winfo_height())
def export_to_excel(self):
cursor = self.conn.cursor()
cursor.execute("SELECT * FROM weather")
data = cursor.fetchall()
if data:
file_path = filedialog.asksaveasfilename(defaultextension=".xlsx", filetypes=[("Excel files", "*.xlsx")])
if file_path:
df = pd.DataFrame(data, columns=["ID", "Город", "Температура", "Погода", "Скорость ветра"])
df.to_excel(file_path, index=False)
messagebox.showinfo("Экспорт в Excel", f"Данные успешно экспортированы в Excel ({file_path})")
else:
messagebox.showinfo("Экспорт в Excel", "Нет данных для экспорта")
def import_from_excel(self):
file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])
if file_path:
try:
df = pd.read_excel(file_path)
cursor = self.conn.cursor()
cursor.executemany("INSERT INTO weather (city, temperature, weather_conditions, wind_speed) VALUES (?, ?, ?, ?)",
df[["Город", "Температура", "Погода", "Скорость ветра"]].values.tolist())
self.conn.commit()
messagebox.showinfo("Импорт из Excel", "Данные успешно импортированы из Excel")
except Exception as e:
messagebox.showinfo("Импорт из Excel", f"Произошла ошибка: {str(e)}")
def open_search_window(self):
search_window = SearchWindow(self.master, self.search_by_criteria, self.conn)
def search_by_criteria(self, criteria, value):
for row in self.tree.get_children():
self.tree.delete(row)
# Поиск данных по всем критериям
cursor = self.conn.cursor()
query = f"SELECT * FROM weather WHERE {criteria} LIKE ?"
cursor.execute(query, ('%' + value + '%',))
data = cursor.fetchall()
if data:
for row in data:
self.tree.insert("", "end", values=row)
else:
messagebox.showinfo("Данные о погоде", f"Нет данных о погоде для {criteria}={value}")
if __name__ == "__main__":
root = tk.Tk()
app = WeatherApp(root)
root.mainloop()