Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/41: Рейтинг темы: голосов - 41, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 58

Ошибка при создании интерфейса

21.04.2020, 18:16. Показов 8731. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте можете сказать у меня не запускается программа просто открывается консоль,можете сказать открывается она у вас или нет? Если нет можете написать почему так?
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
from tkinter import *
from tkinter.ttk import Combobox  
window = Tk()
window.geometry('500x500')
window.title("Справочник паролей")
 
def parol():
    combo = Combobox(window)
    combo['values'] = ('от кунделика')
    combo.grid(column = 0, row = 200)
 
def password():
    t = True
    while t:
        if get_parol.get() == "111111":
           parol()
           t = False
        else:
            Error = Label(window, text = "Пароль неверен!Повторите попытку")
            Error.grid(column = 0, row = 200)
 
 
text = Label(window, text = "Это программа которая хранит пароли", font = ('Franklin Gothic Demi', 16))
get_parol = Entry(window, width = 20)
txt_parol = Label(window, text = "Введите пароль")
button1 = Button(window, text = "Подтвердить", command = password())
text.grid(column = 1,row = 10)
txt_parol.grid(column = 0, row = 50)
get_parol.grid(column = 0,row = 100)
button1.grid(column = 0, row = 150)
 
window.mainloop()
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.04.2020, 18:16
Ответы с готовыми решениями:

Проблемы при создании интерфейса программы
Задачи, которые я не знаю, как решить и к решению которых требуется подсказка: Когда я нажимаю клавишу "Выбрать файл", выбираю...

Ошибка при создании кнопки
Приветствую всех, прошу помощи в решении проблемы. Что я делаю не так? import tkinter as tk class CreateWindow(): def...

Проблемы с Qmovie при создании интерфейса с изменяемым размером
Создаю учебный проект по PyQt5. Нашёл замечательную возможность отображать гифки в Qlable, с помощью Qmovie, создал простейший просмоторщик...

11
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
21.04.2020, 18:40
Лучший ответ Сообщение было отмечено Reyme как решение

Решение

ошибка номер один - 1 вы привязали функцию к кнопке и сразу вызвали ее
Python
1
button1 = Button(window, text = "Подтвердить", command = password())
правильно
Python
1
button1 = Button(window, text = "Подтвердить", command = password)
ошибка 2 - вызвав функцию у вас код ждет ее завершения но так как там цикл то этого не произойдет и код до строчки window.mainloop() не дойдет то есть обновление окна не произойдет (не создаться) изучайте параллельные потоки и в этом потоке должна работать функция с циклом или пересмотрите алгоритм. при неправильном вводе цикла быть не должно
1
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
21.04.2020, 18:40
Python
1
2
3
4
5
6
7
    while t:
        if get_parol.get() == "111111":
           parol()
           t = False
        else:
            Error = Label(window, text = "Пароль неверен!Повторите попытку")
            Error.grid(column = 0, row = 200)
Я думаю, что дело в этом цикле.
1
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 58
22.04.2020, 06:23  [ТС]
Здравствуй,спасибо,я всё исправил программа заработала,ну только при вводе верного пароля программа срабатывает,а при в вводе неверного программа не отвечает.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
22.04.2020, 07:32
Reyme, На первую ошибку Вам указал Semen-Semenich, если убрать круглые скобки у названия функции, то форма нормально создается, выводится на экран и переходит в режим ожидания. Вводим шесть единиц и нажимаем кнопку "Подтвердить". Запускается функция password, которая в свою очередь запускает функцию parol, создающую Combobox. Идет возврат в цикл while и цикл завершается. Управление опять передается форме, которая переходит в режим ожидания. А ожидать нечего, так как других элементов формы, которые запускали какие то события, например закрытие формы, у Вас нет. Вот форма и ждет не понятно чего. У Вас не доработан алгоритм, что дальше после отработки цикла должна делать программа. Единственно, что Вы можете, это вновь и вновь нажимать кнопку "Подтвердить" и по новой создавать Combobox, выбирать в нем значение, которое программа никак не использует. Хотя бы добавьте в форму кнопку "Выход" для закрытия формы.
И продумайте алгоритм, что дальше ваша программа должна делать, после того как вы указали пароль и выбрали значение из списка. А так в том объеме, в котором у Вас написана программа, у Вас все работает (после того, как вы уберете лишние скобки, на которые Вам указал Semen-Semenich )

Добавлено через 8 минут
Цитата Сообщение от Reyme Посмотреть сообщение
а при в вводе неверного программа не отвечает.
Потому, что блок else написан не правильно, Вы не можете добавлять виджет в уже созданную форму. Сообщения нужно выводить в окнах сообщений. Но если Вы даже все правильно сделаете, у Вас всеравно программа замрет ожидая дальнейших действий, которые у Вас не предусмотрены. Создайте хотя бы кнопку "Выход", что бы Вы могли видеть, что программа не зависла, а просто ей больше нечего делать.
1
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 58
22.04.2020, 11:52  [ТС]
Здравствуйте,я собирался её доработать когда пойму из-за чего она не работает, а за блок else спасибо.

Добавлено через 14 минут
Можете написать как должен выглядеть блок else правильно,просто я туп и не могу понять..

Добавлено через 3 часа 53 минуты
Использовал в блоке else messagebox.showerror() всё заработало, ну мне интересно есть ли ещё альтернативы не используя messagebox?
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
22.04.2020, 18:21
так для разнообразия с потоками
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
from tkinter import *
from tkinter.ttk import Combobox
from threading import Thread
import time
 
def try_pass():
    for _ in range(4):
        txt_parol.config(text ="Пароль подтвержден")
        txt_parol.config(bg = 'light green')
        time.sleep(0.5)
        txt_parol.config(bg = 'green')
        time.sleep(0.5)
        txt_parol.config(bg = 'light green')
    txt_parol.destroy()
    get_parol.destroy()
    button1.destroy()
    
def errors_pass():
    txt_parol.config(text ="Пароль неверен!Повторите попытку")
    for _ in range(4):
        txt_parol.config(bg = 'red')
        time.sleep(0.5)
        txt_parol.config(bg = 'light green')
        time.sleep(0.5)
    txt_parol.config(text = "Введите пароль", bg = 'white')
        
def parol():
    combo = Combobox(window)
    combo['values'] = ('от кунделика')
    combo.grid(column = 0, row = 200)
 
def password():
    if get_parol.get() == "111111":
        Thread(target = try_pass, args = [], daemon = True).start()
        parol()
    else:
        Thread(target = errors_pass, args = [], daemon = True).start()
        
       
 
window = Tk()
window.geometry('500x500')
window.title("Справочник паролей") 
text = Label(window, text = "Это программа которая хранит пароли", font = ('Franklin Gothic Demi', 16))
text.grid(column = 1,row = 10)
get_parol = Entry(window, width = 20)
get_parol.grid(column = 0,row = 100)
txt_parol = Label(window, text = "Введите пароль")
txt_parol.grid(column = 0, row = 50)
button1 = Button(window, text = "Подтвердить", command = password)
button1.grid(column = 0, row = 150)
window.mainloop()
2
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
22.04.2020, 19:05
Цитата Сообщение от Reyme Посмотреть сообщение
мне интересно есть ли ещё альтернативы не используя messagebox?
А зачем?
messagebox как раз для таких случаев.

Кстати для разных случаев у messagebox существуют различные варианты:

messagebox.showinfo(title, message) Отображает информационное окно

showwarning(title, message) Отображает окно с уведомлением

messagebox.showerror(title, message) Отображает окно с ошибкой

messagebox.askyesnocancel(title, message) Отображает окно с запросом, ДА, НЕТ, ОТМЕНА.

messagebox.askyesno(title, message) Отображает окно с запросом, ДА, НЕТ

messagebox.askretrycancel(title, message)

messagebox.askquestion(title, message)

messagebox.askokcancel(title, message)

Добавлено через 8 минут
Reyme, Но если Вам так уж хочется использовать для сообщения Label, то можно и ее. Но только для этого ее нужно изначально разместить на форме (выделив для нее место) и по ходу менять ее текст с помощью метода config().
Прочитать про него можно сдесь
https://metanit.com/python/tutorial/9.3.php
1
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 58
24.04.2020, 12:25  [ТС]
Здравствуйте,я доделал программу всё работает ну при попытке изменить цвет(в 11 строчке), программа выдаёт ошибку я вчера весь день пытался понять и не понял в чём ошибка. Если же 11 строчку стереть всё работает.
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
from tkinter import *
from tkinter import messagebox
from tkinter.ttk import *
import time
import pyperclip
from threading import Thread
#Изменяет надпись 'введите пароль' на 'Пароль подтвержден'
def true_pass():
    for i in range(3):
        txt_parol.config(text = "Пароль подтвержден!")
        txt_parol.config(bg = "green")
        time.sleep(0.5)
    txt_parol.destroy()
    button1.destroy()
    get_parol.destroy()
 
#Копирует пароль
def copy():
     pyperclip.copy(parl)
     txt_copy.pack()
 
#Получает данные из cobmo и вывводит пароль для нужной системы
def combo_true():
    if combo.get() == 'ОтКунделика':
        global parl
        parl = "xcxc"
        parol1 = Label(window, text = parl)
        parol1.pack(ipadx = 10, ipady = 20)
        copy_but.pack()
 
#Создаёт виджет поля с выпадающим списком и служит для Выбора от пароля
def parol():
    global combo
    combo = Combobox(window)
    combo['values'] = ('ОтКунделика','От недели')
    combo.pack()
 
#Проверяет ввод пароля,при проавильном вводе разрешает доступ,а при неправильном запрещает
def password():
        if get_parol.get() == "111111":
           Thread(target = true_pass, args = [], daemon = True).start()
           parol()
           par.pack()
 
        else:
            messagebox.showerror("Error", "Вы ввели неверный пароль!")
 
window = Tk()
window.geometry('200x200')
window.title("Справочник паролей")
text = Label(window, text = "Это программа которая хранит пароли", font = ('Franklin Gothic Demi', 8))
get_parol = Entry(window, width = 20)
txt_parol = Label(window, text = "Введите пароль")
button1 = Button(window, text = "Подтвердить", command = password)
exit_but = Button(window, text = "ВЫЙТИ", command = exit)
par = Button(window, text = "Выбрать", command = combo_true)
copy_but = Button(window, text = "Копировать", command = copy )
txt_copy = Label(window, text = 'Пароль скопирован', font = ('Franklin Gothic Demi',8))
text.pack()
txt_parol.pack()
get_parol.pack()
button1.pack()
window.mainloop()
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
24.04.2020, 16:43
Reyme, Вот пример , как задавать цвет.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from tkinter import *
 
clicks = 0
 
 
def click_button():
    global clicks
    clicks += 1
    btn.config(text="Clicks {}".format(clicks))
 
root = Tk()
root.title("GUI на Python")
root.geometry("300x250")
 
 
btn = Button(text="Clicks 0", background="#1ff", foreground="#111",
             padx="20", pady="8", font="16", command=click_button)
btn.pack()
 
root.mainloop()
Я методом тыка подобрал код для цвета близкого зеленому. Для подбора нужного Вам цвета найдите таблицу кодов для цветов.

Добавлено через 20 минут
Проверил, сокращения не берет.

Добавлено через 7 минут
Хотя проверил, названиями цвет тоже можно указывать. Но при этом нет плавной регулировки цвета как с помощью кодов. "green" дает темно зеленый, так что даже текст черного цвета на этом фоне плохо виден.

Добавлено через 8 минут
По моему я понял, что при создании кнопки можно использовать сокращение bg, но в методе config нужно указывать только полное название метода.

Добавлено через 3 минуты
Вот так Ваш код работает
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
from tkinter import *
from tkinter import messagebox
from tkinter.ttk import *
import time
import pyperclip
from threading import Thread
#Изменяет надпись 'введите пароль' на 'Пароль подтвержден'
def true_pass():
    for i in range(3):
        txt_parol.config(text = "Пароль подтвержден!")
        txt_parol.config(background="#1ff")
        time.sleep(0.5)
    txt_parol.destroy()
    button1.destroy()
    get_parol.destroy()
 
#Копирует пароль
def copy():
     pyperclip.copy(parl)
     txt_copy.pack()
 
#Получает данные из cobmo и вывводит пароль для нужной системы
def combo_true():
    if combo.get() == 'ОтКунделика':
        global parl
        parl = "xcxc"
        parol1 = Label(window, text = parl)
        parol1.pack(ipadx = 10, ipady = 20)
        copy_but.pack()
 
#Создаёт виджет поля с выпадающим списком и служит для Выбора от пароля
def parol():
    global combo
    combo = Combobox(window)
    combo['values'] = ('ОтКунделика','От недели')
    combo.pack()
 
#Проверяет ввод пароля,при проавильном вводе разрешает доступ,а при неправильном запрещает
def password():
        if get_parol.get() == "111111":
           Thread(target = true_pass, args = [], daemon = True).start()
           parol()
           par.pack()
 
        else:
            messagebox.showerror("Error", "Вы ввели неверный пароль!")
 
window = Tk()
window.geometry('200x200')
window.title("Справочник паролей")
text = Label(window, text = "Это программа которая хранит пароли", font = ('Franklin Gothic Demi', 8))
get_parol = Entry(window, width = 20)
txt_parol = Label(window, text = "Введите пароль")
button1 = Button(window, text = "Подтвердить", command = password)
exit_but = Button(window, text = "ВЫЙТИ", command = exit)
par = Button(window, text = "Выбрать", command = combo_true)
copy_but = Button(window, text = "Копировать", command = copy )
txt_copy = Label(window, text = 'Пароль скопирован', font = ('Franklin Gothic Demi',8))
text.pack()
txt_parol.pack()
get_parol.pack()
button1.pack()
window.mainloop()
1
0 / 0 / 0
Регистрация: 23.05.2019
Сообщений: 58
25.04.2020, 11:05  [ТС]
Здравствуйте,спасибо, всё заработало. А теперь я не понимаю почему у Semen-Semenich всё работает при использование bg.
Там выше есть его код.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
25.04.2020, 16:30
Reyme, Я повозился, но разобрался в чем дело.
Вы импортируете все переменные из модуля tkinter.ttk
Python
1
from tkinter.ttk import *
И видимо среди переменных модуля tkinter.ttk есть переменная bg. В результате происходит конфликт имен.
А Semen-Semenich, импортирует только переменную Combobox
Python
1
from tkinter.ttk import Combobox
Поэтому у него конфликта имен не происходит и bg нормально отрабатывает.
Вообще, при крайней необходимости не рекомендуется использовать при импорте звезду *. Если Вы знаете что Вам нужно, то при импорте указывайте конкретные переменные, которые Вы будете использовать.
Или используйте импорт с помощью синтаксиса import <name>. В этом случае конфликт имен исключен, так как создается отдельное, ни с чем не пересекающееся пространство имен (квалифицированных имен).
Вот для модуля tkinter обычно используют звезду *, потому что обычно имена из этого модуля нигде больше не используются. И Вы не должны давать своим переменным имена используемые в tkinter .
Резюме:
Замените в своем коде строку импорта на
Python
1
from tkinter.ttk import Combobox
и тогда можете использовать bg.
И на будущее, аккуратнее используйте при импорте звезду *.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.04.2020, 16:30
Помогаю со студенческими работами здесь

Ошибка при создании .exe
import pyperclip from tkinter import* #получаем текст из буфера обмена def buferRU (): bufer = pyperclip.paste() ...

Ошибка при создании apk kivy buildozer
У меня появляется какая-то непонятная ошибка с buildozer'а и я не знаю, что делать. Помогите пожалуйста https://pastebin.com/ZHZTHi0q

Произошла логическая ошибка при создании программы пропадают большинство объектов с экрана
Создал программу по упражнению из книги суть программы вывести несколько рядов капель на экран и сделать так чтобы они падали в низ экрана...

Ошибка при создании интерфейса
В m-файле graf, использую метод хорд Ошибка в строке 48 - т.е. в самом последнем end (usage might be invalid MATLAB syntax) Помогите,...

Ошибки при создании графического интерфейса
Здравствуйте, я только новичок в matlab'e, было дано задание: Необходимо построить имитационную модель одноканальной СМО с отказами (по...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru