Здравствуйте, нужна помощь по интерфейсу

Максим Грушин

Пользователь
Пользователь
Апр 10, 2020
63
8
8
19
Тюмень
Модуль для интерфейса использую tkinter. Я в курсе что PyQt5 лучше, но я не могу кое что сделать, а именно надо было чтоб пользователь ввел слово yes,
А потом нажал на кнопку и после этого вывелось любое сообщение. Ну конечно надо было чтобы можно было ввести no и пошло другое ветвление.
Я знаю как сделать это в коде, но как из кода в интерфейс сделать, хз. Поэтому я и перешел на tkinter, надеясь, что там легче.
В чем суть вопроса, помогите пожалуйста по поводу чтобы в tkinter можно было сделать ветвление, то есть ввел yes идет одно событие, вводишь no идет другое событие
Если что вот он код, да знаю не лучший, да он даже не код почти)) Но я новичок, вот почти неделю уже изучаю python. Вроде такое все выучил а GUI не выучил, вот сижу учу:D
2020-04-13_04-19-52.png
 
  • Мне нравится
Реакции: Student

God

Уже не совсем ламер.
Пользователь
Апр 11, 2020
91
14
8
Не работает, наверно потому что там print, а у меня же интерфейс
Это уже другой вопрос, ветка событий ведь сменяется?
И надо сделать так чтобы lbl1 изменил текст.
Ну это легко найти на Stack Overflow.
Python:
if txt == 'yes':
    lbl2.config(text = 'Время в правом нижнем углу экрана ;)')
    lbl3.config(text = 'Дату смотри там же')
if txt == 'no':
    lbl1.config(text = 'Не хотите - и не надо.')
 
Последнее редактирование:

God

Уже не совсем ламер.
Пользователь
Апр 11, 2020
91
14
8
1. Оформите код как положено, чтобы все могли его скопировать и протестировать.
2. Решение (это запихать в функцию hap1):
Python:
if txt == 'no':
    print('Ветка действий 1.')
elif txt == 'yes':
    print('Ветка действий 2.')
else:
    print('Что-то не так.')
 
  • Мне нравится
Реакции: Максим Грушин

Максим Грушин

Пользователь
Пользователь
Апр 10, 2020
63
8
8
19
Тюмень
1. Оформите код как положено, чтобы все могли его скопировать и протестировать.
2. Решение (это запихать в функцию hap1):
Python:
if txt == 'no':
    print('Ветка действий 1.')
elif txt == 'yes':
    print('Ветка действий 2.')
else:
    print('Что-то не так.')
Хорошо, спасибо. Я пока что только учу все это) не суди строго
 

God

Уже не совсем ламер.
Пользователь
Апр 11, 2020
91
14
8
Хорошо, спасибо. Я пока что только учу все это) не суди строго
Главное чтобы сработало)
 

Максим Грушин

Пользователь
Пользователь
Апр 10, 2020
63
8
8
19
Тюмень
Главное чтобы сработало)
Не работает, наверно потому что там print, а у меня же интерфейс
И надо сделать так чтобы lbl1 изменил текст. То есть при написание в txt слово yes, потом нажимаешь на кнопку и lbl1 изменяет на какой то другой текст
 

Максим Грушин

Пользователь
Пользователь
Апр 10, 2020
63
8
8
19
Тюмень
Это уже другой вопрос, ветка событий ведь сменяется?

Ну это легко найти на Stack Overflow.
Python:
lbl2.config(text = 'Время в правом нижнем углу экрана ;)')
lbl3.config(text = 'Дату смотри там же')
По поводу ветки, нет вообще ничего не изменяется
По поводу сайта спасибо, сейчас посмотрю
 

God

Уже не совсем ламер.
Пользователь
Апр 11, 2020
91
14
8
1. Получать значение нужно через txt.get().
2. Нужно делать не
Python:
txt = Entry(window).place(x=0, y=100)
,
а
Python:
txt = Entry(window)
txt.place(x=0, y=100)
. Я так и не понял - почему, но, возможно, этот ответ вам объяснит.

Я сделал простую программу для эксперимента:
Python:
from tkinter import *

def click():
    txt = entry.get()
    if txt == 'no':
        label.config(text='no')
    elif txt == 'yes':
        label.config(text='yes')
    else:
        label.config(text = 'Вы ввели какой-то бред...')

window = Tk()
label = Label(window, text='До')
label.pack()
entry = Entry(window)
entry.pack()
button = Button(window, text='Кнопка', command=click)
button.pack()

window.mainloop()
 

Максим Грушин

Пользователь
Пользователь
Апр 10, 2020
63
8
8
19
Тюмень
1. Получать значение нужно через txt.get().
2. Нужно делать не
Python:
txt = Entry(window).place(x=0, y=100)
,
а
Python:
txt = Entry(window)
txt.place(x=0, y=100)
. Я так и не понял - почему, но, возможно, этот ответ вам объяснит.

Я сделал простую программу для эксперимента:
Python:
from tkinter import *

def click():
    txt = entry.get()
    if txt == 'no':
        label.config(text='no')
    elif txt == 'yes':
        label.config(text='yes')
    else:
        label.config(text = 'Вы ввели какой-то бред...')

window = Tk()
label = Label(window, text='До')
label.pack()
entry = Entry(window)
entry.pack()
button = Button(window, text='Кнопка', command=click)
button.pack()

window.mainloop()
Да прикольно, у тебя все работает, но у меня почему то, когда запускаю программу, и нажимаю на кнопку в консоли пишется
Python:
C:\Python>python main.py
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "main.py", line 5, in inLabel
    txt = entry.get()
NameError: name 'entry' is not defined
Я даже не знаю почему так, ошибки вообще не вижу, почему ему не нравится этот entry?)))) :D
 
Последнее редактирование:

God

Уже не совсем ламер.
Пользователь
Апр 11, 2020
91
14
8
Так. Тут уже всё запуталось, поэтому разложу всё аккуратно.

Python:
from tkinter import *


def inLabel():
    t = ent.get()
    lbl1.configure(text = t)
  



# Само окно
window = Tk()
window.title('Time and Data')
window.geometry('200x250')
window.config(bg = '#ebcfb9')
# Кнопки
btn = Button(window, text = 'click', width = 5, height = 0, command = inLabel).place(x=0, y=137)
# Зоны для писания
Entry(window, width = 30, borderwidth = 10).place(x=0, y=100)
#Текста
lbl1 = Label(window, text = 'Привет, друг.\nВы хотите посмотреть\nвремя и дату?\nЕсли да то введи-->yes\n если нет то введи-->no', bg = '#ebcfb9').place(x=30, y=0)
lbl2 = Label(window, text = 'Время-->', bg = '#ebcfb9').place(x=0, y=170)
lbl3 = Label(window, text = 'Дата-->', bg = '#ebcfb9').place(x=0, y=200)

window.mainloop()


Python:
from tkinter import *


def inLabel():
    t = ent.get()
    lbl1.configure(text = t)
  



# Само окно
window = Tk()
window.title('Time and Data')
window.geometry('200x250')
window.config(bg = '#ebcfb9')
# Кнопки
btn = Button(window, text = 'click', width = 5, height = 0, command = inLabel).place(x=0, y=137)
# Зоны для писания
ent = Entry(window, width = 30, borderwidth = 10)
ent.place(x=0, y=100)
#Текста
lbl1 = Label(window, text = 'Привет, друг.\nВы хотите посмотреть\nвремя и дату?\nЕсли да то введи-->yes\n если нет то введи-->no', bg = '#ebcfb9')
lbl1.place(x=30, y=0)
lbl2 = Label(window, text = 'Время-->', bg = '#ebcfb9')
lbl2.place(x=0, y=170)
lbl3 = Label(window, text = 'Дата-->', bg = '#ebcfb9')
lbl3.place(x=0, y=200)

window.mainloop()

Что изменилось?
1. Entry() теперь хранится в переменной ent.
2.Все элементы (ent, lbl1, lbl2 и т. д.) размещаются в отдельных строках!!!!
Т. е. не
Python:
lbl2 = Label(window, text = 'Время-->', bg = '#ebcfb9').place(x=0, y=170)
а

Python:
lbl2 = Label(window, text = 'Время-->', bg = '#ebcfb9')
lbl2.place(x=0, y=170)
В одной строке описание, в другой размещение!
 

Максим Грушин

Пользователь
Пользователь
Апр 10, 2020
63
8
8
19
Тюмень
Так. Тут уже всё запуталось, поэтому разложу всё аккуратно.

Python:
from tkinter import *


def inLabel():
    t = ent.get()
    lbl1.configure(text = t)
  



# Само окно
window = Tk()
window.title('Time and Data')
window.geometry('200x250')
window.config(bg = '#ebcfb9')
# Кнопки
btn = Button(window, text = 'click', width = 5, height = 0, command = inLabel).place(x=0, y=137)
# Зоны для писания
Entry(window, width = 30, borderwidth = 10).place(x=0, y=100)
#Текста
lbl1 = Label(window, text = 'Привет, друг.\nВы хотите посмотреть\nвремя и дату?\nЕсли да то введи-->yes\n если нет то введи-->no', bg = '#ebcfb9').place(x=30, y=0)
lbl2 = Label(window, text = 'Время-->', bg = '#ebcfb9').place(x=0, y=170)
lbl3 = Label(window, text = 'Дата-->', bg = '#ebcfb9').place(x=0, y=200)

window.mainloop()


Python:
from tkinter import *


def inLabel():
    t = ent.get()
    lbl1.configure(text = t)
  



# Само окно
window = Tk()
window.title('Time and Data')
window.geometry('200x250')
window.config(bg = '#ebcfb9')
# Кнопки
btn = Button(window, text = 'click', width = 5, height = 0, command = inLabel).place(x=0, y=137)
# Зоны для писания
ent = Entry(window, width = 30, borderwidth = 10)
ent.place(x=0, y=100)
#Текста
lbl1 = Label(window, text = 'Привет, друг.\nВы хотите посмотреть\nвремя и дату?\nЕсли да то введи-->yes\n если нет то введи-->no', bg = '#ebcfb9')
lbl1.place(x=30, y=0)
lbl2 = Label(window, text = 'Время-->', bg = '#ebcfb9')
lbl2.place(x=0, y=170)
lbl3 = Label(window, text = 'Дата-->', bg = '#ebcfb9')
lbl3.place(x=0, y=200)

window.mainloop()

Что изменилось?
1. Entry() теперь хранится в переменной ent.
2.Все элементы (ent, lbl1, lbl2 и т. д.) размещаются в отдельных строках!!!!
Т. е. не
Python:
lbl2 = Label(window, text = 'Время-->', bg = '#ebcfb9').place(x=0, y=170)
а

Python:
lbl2 = Label(window, text = 'Время-->', bg = '#ebcfb9')
lbl2.place(x=0, y=170)
Это я уже сам сделал, по вашей ссылки я посмотрел в чем ошибка и понял, что лучше так не делать, но та ошибка все равно появляется
 

Форум IT Специалистов