0 / 0 / 0
Регистрация: 07.03.2023
Сообщений: 2
1

Отдельно функция работает(Строка поиска по treeview), а если запускать эту функцию в другой функции - не меняется

07.03.2023, 19:58. Показов 528. Ответов 1

Author24 — интернет-сервис помощи студентам
Пожалуйста, помогите!
Есть форма с treeview, она показывает данные из таблицы clients.db.
Так же есть кнопка удаления(работает), строка поиска и кнопка поиска.
Если запускать функцию clientsotru(), то строка поиска работает.
Если запускать функцию clientsotru() по кнопке в функции sotrud(), форма открывается, кнопка удаления работает, а строка поиска нет.
В чем моя ошибка, подскажите пожалуйста.

Все прилагается в архиве.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
from tkinter import *
import sqlite3
from tkinter import messagebox as mb
from tkinter import ttk
 
 
clr = "black"
 
 
def sotrud():
 
    root2 = Tk()
    root2.title('Сотрудник')
    root2.geometry('650x300')
    root2.resizable(width=0, height=0)
    root2["bg"] = clr
 
    
    q4 = Button(root2, command=clientsotru, text="КЛИЕНТСКАЯ БАЗА")
    q4.pack()
 
    root2.mainloop()
 
def clientsotru():
    
    root = Tk()
    root.title('Сотрудник/Клиентская база')
    root.geometry('1300x400')
    root.resizable(width=0, height=0)
    root["bg"] = clr
    q = StringVar()
    FR23 = Frame(root, bg=clr)
    FR23.pack(side=TOP, fill="both")
 
    lb = Label(FR23, text="КЛИЕНТСКАЯ БАЗА", font = ("Century Gothic", 25), background=clr, fg="#ffffff")
    lb.pack(pady=10)
 
 
    def search():
        conn = sqlite3.connect('clients.db')
        cur = conn.cursor()
        cur.execute("SELECT * FROM client WHERE fio LIKE '%"+q.get()+"%'")
        rows = cur.fetchall()
        tree.delete(*tree.get_children())
        for i in rows:
            tree.insert('', 'end', values=i)
        conn.close()
 
    def delete():
        for selection_item in tree.selection():
            conn = sqlite3.connect('clients.db')
            cur = conn.cursor()
            cur.execute('''DELETE FROM client WHERE userid=?''', (tree.set(selection_item, '#1')))
            conn.commit()
            conn.close()
        selected_item = tree.selection()[0]
        tree.delete(selected_item)
        
    def connn():
        conn = sqlite3.connect('clients.db')
        cur = conn.cursor()
        cur.execute("SELECT * FROM client")
        rows = cur.fetchall()
        for row in rows:
            tree.insert("",END, values=row)
        conn.close()
 
    tree_frame = Frame(root)
    tree_frame.pack(pady=10)
    tree_scroll = Scrollbar(tree_frame)
    tree_scroll.pack(side=RIGHT, fill=Y)
    tree = ttk.Treeview(tree_frame, column=("column1", "column2", "column3", "column4","column5", "column6"), show='headings', yscrollcommand=tree_scroll.set)
    tree.heading("#1", text="Номер")
    tree.heading("#2", text="Фио")
    tree.heading("#3", text="Паспортные данные")
    tree.heading("#4", text="Тур")
    tree.heading("#5", text="Дата вылета")
    tree.heading("#6", text="Дата прилета")
    tree.pack()
    connn()
 
    button_frame = LabelFrame(root, bg=clr)
    button_frame.pack(expand="yes", padx=10)
    
    ent = Entry(button_frame, textvariable=q, font = ("Century Gothic", 15), fg="#ffffff", background="#355e7e")
    ent.grid(row=0, column=0, padx=10, pady=10)
 
    btn = Button(button_frame,command=search, text="Поиск", font = ("Century Gothic", 15), fg="#ffffff", background="#355e7e")
    btn.grid(row=0, column=1, padx=10, pady=10)
 
    bt = Button(button_frame,command=delete, text="Удалить", font = ("Century Gothic", 15), fg="#ffffff", background="#355e7e")
    bt.grid(row=0, column=3, padx=10, pady=10)
    root.mainloop()
 
 
sotrud()
Вложения
Тип файла: zip Папка.zip (1.9 Кб, 2 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2023, 19:58
Ответы с готовыми решениями:

Написать функцию, которая получает на вход имя другой функции и возвращает саму функцию, если она есть и null, если нет.
Написать функцию, которая получает на вход имя другой функции, а на выходе возвращает саму функцию,...

Как можно отдельно вывести эту функцию?
Здравствуйте. onclick="$spBreakLinks.send(\'' + l + '\');" Нужно чтобы было примерно так:...

Если запускать метод Method1 из нового потока, то при первом вызове MoveTheShell (в цикле) не меняется значение Shell.Y
В общем: В методе Method1 есть цикл while (Possible) { ...

Выход из функции, если эта работает в другой функции
Здравствуйте, у мне такая проблема. У меня есть одна функция, которая полностью контролирует всю...

1
2 / 1 / 1
Регистрация: 07.03.2023
Сообщений: 11
07.03.2023, 21:50 2
Лучший ответ Сообщение было отмечено jonntchib как решение

Решение

Проблема заключается в том, что вы создаете несколько экземпляров Tk() - корневых окон. Это может вызвать проблемы в работе приложения, включая неожиданное поведение виджетов, таких как строка поиска в вашем случае.

Вместо создания нового экземпляра Tk() в функции clientsotru(), используйте Toplevel() для создания второстепенного окна. Toplevel() позволяет создать новое окно внутри главного окна без создания нового корневого окна.

Измените следующую строку в функции clientsotru():
root = Tk()

На:
root = Toplevel()


Изменение этой строки должно решить проблему с строкой поиска в вашем приложении.
1
07.03.2023, 21:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2023, 21:50
Помогаю со студенческими работами здесь

Написать функцию для поиска самого длинного слова в строке. Строка – параметр функции. Язык С
Написать функцию для поиска самого длинного слова в строке. Строка – параметр функции. ...

Почему макрос работает, если создавать и запускать его в Командной строке, а если в пакетном файле, то нет?
Подскажите почему если вводить последовательно в командной строке DOSKEY npp="C:\Program...

если запускать приложение в вижуалке (ctrl + f5) то оно работает правильно, но если запустить через .exe файл - нет!
если запускать приложение в вижуалке (ctrl + f5) то оно работает правильно, но если запустить через...

Не работает функция после отработки другой функции
Здравствуйте. Написал код, но почему-то не работает одна функция, когда отработала вторая. Вот эти...

Память отдельно не работает. Но совместно с другой работает
Что-то очень странное творится с моими планками ОЗУ, инфы пока нигде не нашел. Значит имеется 2...

Написать функцию на JavaScript для поиска записей в таблице БД. Входные параметры - наименование таблицы и строка поиска
Всем доброго времени суток, помогите с решением данной задачи или подскажите как ее делать...

Нужно запускать функцию stt(); если существует процесс
Нужно запускать функцию stt(); если существует процесс, если процесс закрыли - закрывать функцию...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru