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

GUI на Python

03.02.2021, 12:13. Показов 3043. Ответов 12

Студворк — интернет-сервис помощи студентам
На форме располагаются: семь редакторов Entry с вписанными названиями дней недели, кнопка Close, список ListBox с названиями шести цветов и панель. Нажатие одной из клавиш клавиатуры приводит сокрытию соответствующего редактора и отображению соответствующего дня недели на панели, а также показу ранее скрытого редактора. После появления ранее скрытого редактора текст в нем отображается цветом, заданным списком ListBox. Кнопка Close заканчивает программу.

Часть задания я сделал - вывод окна с полями Entry, в которых вписан текст, списком Listbox, в котором перечислены 6 цветов, поле, в котором при нажатии клавиш с 1 по 7 выводятся дни недели, и кнопка с командой закрытия окна. Однако я не могу понять - как описать сокрытие поля Entry при нажатии соответствующей клавиши и показ ранее скрытого поля Entry с отображением текста цветом, заданным списком Listbox. Прошу помочь.

Вот мой код:
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
97
98
99
from tkinter import *
from tkinter import messagebox
 
# commands
def add_one(event):
    l1.config(text=message.get())
 
def add_two(event):
    l1.config(text=message1.get())
 
def add_three(event):
    l1.config(text=message2.get())
 
def add_four(event):
    l1.config(text=message3.get())
 
def add_five(event):
    l1.config(text=message4.get())
 
def add_six(event):
    l1.config(text=message5.get())
 
def add_seven(event):
    l1.config(text=message6.get())
 
def info():
    messagebox.showinfo('Справка', 'Управление - клавиши от "1" до "7" отображают дни недели по порядку')
 
# head
root = Tk()
root.geometry('800x600')
root.title("GUI на Python")
root.resizable(width=False, height=False)
 
# txt
message = StringVar()
message_entry = Entry(root, textvariable=message, width=15)
message_entry.place(x = 25, y = 25)
message_entry.insert(0, "Понедельник")
 
message1 = StringVar()
name_entry1 = Entry(root, textvariable=message1, width=15)
name_entry1.place(x = 25, y = 50)
name_entry1.insert(0, "Вторник")
 
message2 = StringVar()
name_entry2 = Entry(root, textvariable=message2, width=15)
name_entry2.place(x = 25, y = 75)
name_entry2.insert(0, "Среда")
 
message3 = StringVar()
name_entry3 = Entry(root, textvariable=message3, width=15)
name_entry3.place(x = 25, y = 100)
name_entry3.insert(0, "Четверг")
 
message4 = StringVar()
name_entry4 = Entry(root, textvariable=message4, width=15)
name_entry4.place(x = 25, y = 125)
name_entry4.insert(0, "Пятница")
 
message5 = StringVar()
name_entry5 = Entry(root, textvariable=message5, width=15)
name_entry5.place(x = 25, y = 150)
name_entry5.insert(0, "Суббота")
 
message6 = StringVar()
name_entry6 = Entry(root, textvariable=message6, width=15)
name_entry6.place(x = 25, y = 175)
name_entry6.insert(0, "Воскресенье")
 
#nameLabel
l1 = Label(root, width=11, height=1, bd = 2, relief="groove")
l1.place(x = 300, y = 25)
 
root.bind('<Key 1>', add_one)
root.bind('<Key 2>', add_two)
root.bind('<Key 3>', add_three)
root.bind('<Key 4>', add_four)
root.bind('<Key 5>', add_five)
root.bind('<Key 6>', add_six)
root.bind('<Key 7>', add_seven)
 
#listbox
colors = ['Жёлтый', 'Зелёный', 'Красный', 'Синий', 'Коричневый', 'Чёрный']
colors_listbox = Listbox()
 
for color in colors:
    colors_listbox.insert(END, color)
 
colors_listbox.place(x = 150, y = 25)
 
#button
z = Button(text = 'Закрыть', bg = 'red', fg = 'black', command = root.destroy)
z.place(x = 495, y = 395)
 
z1 = Button(text = 'Справка', fg = 'black', command = info)
z1.place(x = 495, y = 455)
 
root.mainloop()
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.02.2021, 12:13
Ответы с готовыми решениями:

Python, tkinter, переменные в GUI
Здраствуйте, помогите пожалуйста. Задание: Напишите скрипт, как в примере с флажками; в отличии от примера значения ассоциированных...

Python, модуль tkinter GUI
Здравствуйте, помогите пожалуйста не получается выполнить задание Задание: Напишите приложение с меню, содержащим два пункта: Color и...

В чем дело. Python GUI tkinter
Пишу мелкую игру для школы, программа задает вопрос, пользователь вводит ответ, она выводит правильно или нет и переходит к следующему...

12
 Аватар для menreiven
192 / 136 / 62
Регистрация: 23.05.2013
Сообщений: 299
03.02.2021, 17:58
Цитата Сообщение от Cat_on_Zone Посмотреть сообщение
как описать сокрытие поля Entry при нажатии соответствующей клавиши
Ну если используете place, то можно же просто угнать элемент за пределы видимости окна
Python
1
name_entry.place(x = -100, y = -100)
А потом просто вернуть на место.
Python
1
name_entry.place(x = 25, y = 25)
0
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 78
03.02.2021, 19:04  [ТС]
Цитата Сообщение от menreiven Посмотреть сообщение
Ну если используете place, то можно же просто угнать элемент за пределы видимости окна
Я пытался воспользоваться как раз именно этим способом, но ерунда каждый раз выходит.
0
 Аватар для menreiven
192 / 136 / 62
Регистрация: 23.05.2013
Сообщений: 299
03.02.2021, 19:16
Цитата Сообщение от Cat_on_Zone Посмотреть сообщение
Я пытался воспользоваться как раз именно этим способом, но ерунда каждый раз выходит.
Странно. Я угнал за экран, потом вернул обратно.
Метод, конечно, не очень красивый, но вполне рабочий.
0
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 78
03.02.2021, 19:18  [ТС]
Цитата Сообщение от menreiven Посмотреть сообщение
Странно. Я угнал за экран, потом вернул обратно.
Скорее всего я как-то неправильно пишу.
0
 Аватар для menreiven
192 / 136 / 62
Регистрация: 23.05.2013
Сообщений: 299
03.02.2021, 19:30
Python
1
2
3
4
5
6
7
def add_one(event):
    l1.config(text=message.get())
    name_entry.place(x = -100, y = -100)
 
def add_two(event):
    l1.config(text=message1.get())
    name_entry.place(x = 25, y = 25)
Вроде работает. Правда, выглядит код некрасиво - "тупой подход в лоб". Ну и надо все элементы возвращать - много однотипного "тупого" кода.
0
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 78
03.02.2021, 19:31  [ТС]
Цитата Сообщение от Cat_on_Zone Посмотреть сообщение
Скорее всего я как-то неправильно пишу.
Точнее, у меня получается убрать текст при нажатии клавиши, но обратно вернуть не получается
0
 Аватар для menreiven
192 / 136 / 62
Регистрация: 23.05.2013
Сообщений: 299
03.02.2021, 19:34
Цитата Сообщение от Cat_on_Zone Посмотреть сообщение
но обратно вернуть не получается
Тут "тупой подход в лоб" - по нажатию на кнопку убираем один элемент и возвращаем все (на запариваясь какие убрали, ведь если вернем все, то среди них по любому будет убранный ранее).
0
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 78
03.02.2021, 19:34  [ТС]
Цитата Сообщение от menreiven Посмотреть сообщение
Python
1
2
3
4
5
6
def add_one(event):
    l1.config(text=message.get())
    name_entry.place(x = -100, y = -100)
def add_two(event):
    l1.config(text=message1.get())
    name_entry.place(x = 25, y = 25)
Вроде работает. Правда, выглядит код некрасиво - "тупой подход в лоб". Ну и надо все элементы возвращать - много однотипного "тупого" кода.
А тут я пытаюсь выполнить это через обычное условие (кек).
0
 Аватар для menreiven
192 / 136 / 62
Регистрация: 23.05.2013
Сообщений: 299
03.02.2021, 19:38
Python
1
2
3
4
def add_one(event):
    l1.config(text=message.get())
    name_entry.place(x = -100, y = -100)
    name_entry1.place(x = 25, y = 50)
Спрячем один и вернем остальное.
Другие аналогично - один прячем, остальное возвращаем.
0
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 78
17.02.2021, 10:58  [ТС]
Я так до сих пор не выполнил часть
Цитата Сообщение от Cat_on_Zone Посмотреть сообщение
После появления ранее скрытого редактора текст в нем отображается цветом, заданным списком ListBox
И потом
Цитата Сообщение от menreiven Посмотреть сообщение
Python
1
2
3
4
def add_one(event):
    l1.config(text=message.get())
    name_entry.place(x = -100, y = -100)
    name_entry1.place(x = 25, y = 50)
Спрячем один и вернем остальное.
Другие аналогично - один прячем, остальное возвращаем.
разве не лучше использовать метод .place_forget()?
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
17.02.2021, 11:30
Писал на коленке, Тк уже не помню, ну как пример:
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 import messagebox
 
 
def key_release_listener(event):
    if event.char in "1234567":
        index = int(event.char) - 1
        label.config(text=entries[index].get())
        entries[index].place_forget()
 
        for row, entry in enumerate(entries):
            if row != index:
                entry.place(x=25, y=25 * (row + 1))
 
root = Tk()
root.geometry('800x600')
root.title("GUI на Python")
root.resizable(width=False, height=False)
 
entries = []
for row, text in enumerate(["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"]):
    entry = Entry(root, width=15)
    entry.place(x=25, y=25 * (row + 1))
    entry.insert(0, text)
    entries.append(entry)
 
label = Label(root, width=11, height=1, bd = 2, relief="groove")
label.place(x=300, y=25)
 
root.bind("<KeyRelease>", key_release_listener)
 
root.mainloop()
1
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 78
03.03.2021, 12:32  [ТС]
Я откровенно так и не понял, как работать с Listbox. Создать то создал, а как вытащить из него цвет я не понял.

Добавлено через 5 минут
"После появления ранее скрытого редактора текст в нем отображается цветом, заданным списком ListBox."
Я понимаю, что нужно использовать метод get(), но я скорее вытащу текст, а не свойство (цвет).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2021, 12:32
Помогаю со студенческими работами здесь

Gui Python
Здравствуйте друзья. Прошу помочь разобраться с ошибкой. Изучаю Gui пишу приложение (комбинированный список с тремя элементами, когда...

GUI Python
Дорогие товарищи форумчане! Прошу вашей помощи, в выполнении задания! Рассмотрим работу с фреймворком Qt по созданию виджетов и...

GUI программа на Python 3
Всем привет! Я начинающий программист и изучая теорию хотел бы сразу приступить к практике и создать свою программу, а именно красивый и...

GUI интерфейс на Python
Сделал небольшой GUI интерфейс написанный в Qt Designer . А далее написал небольшую функцию на pythonиспользуя PyQt. Если нажать на make...

GUI приложение python
Всем доброго времени суток! Начала изучать python, поставили такую задачу: написать gui приложение используя pyqt и sql server. Подскажите ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru