Форум сайта python.su
from tkinter import *
from tkinter import messagebox
def mat04():
root04 = Tk()
root04.geometry('500x500+500+100')
root04.title('')
label1 = Label(root04, width=25, font=("Ubunte", 10), text='')
label1.grid(row=0, column=0)
label2 = Label(root04, width=25, font=("Ubunte", 10), text='')
label2.grid(row=0, column=1)
label3 = Label(root04, width=25, font=("Ubunte", 10), text='')
label3.grid(row=1, column=0)
text1=Entry(root04, width=10)
text1.grid(row=1, column=1)
q = "0123456789."
if text1.get()[0] not in q:
text1.insert(END, "Ошибка")
messagebox.showerror("ошибка")
def start_04():
mat04()
root = Tk()
root.geometry('500x500+400+100')
root.title('')
label = Label(root, width=25, font=("Ubunte", 10), text='')
label.grid(row=0, columnspan=2)
btn1 = Button(root, text="0.4 кВ", font=("Ubunte", 10), command=start_04)
btn1.grid(row=1, column=0, sticky="ew")
root.mainloop()
Офлайн
может быть я что-то не ясно объяснил?
Офлайн
Вообще, к Entry принято присоединять переменную типа StringVar и потом работать с этой переменной. То есть работа с Entry напрямую считается устаревшим методом.
whiteА ты комментарии не читал там?
как это сделать. за пример взял калькулятор вот у этого автора
что код либо заучен, либо читается по бумажке. Взять хотя бы метод get(), который Анастасия читает как “джет”.
Почему вы пишете в начале:
from tkinter import *
from tkinter import messagebox ?
Разве “*” не означает импортировать ВСЕ, в том числе и messagebox?
ITGENIO, сбрось пожалуйста свой кодОна не шарит, как код писать и просто обмениваться им, но взялась учить кого-то.
#!/usr/bin/env python3 import tkinter as tk from tkinter.constants import * class App(tk.Frame): def __init__(self, master=None): tk.Frame.__init__(self, master) self.pack(fill=BOTH) self.create_widgets() def create_widgets(self): self.frame_top = tk.Frame(self) self.frame_top.pack(fill=BOTH) self.frame_bottom = tk.Frame(self) self.frame_bottom.pack(fill=BOTH) self.frame_top.label_enter = tk.Label(self.frame_top, text='Enter:') self.frame_top.label_enter.pack(side=LEFT) self.frame_top.entry_var = tk.StringVar() self.frame_top.entry_var.set('???') self.frame_top.entry = tk.Entry(self.frame_top, textvariable=self.frame_top.entry_var) self.frame_top.entry.pack(side=LEFT) self.frame_top.button_ok = tk.Button(self.frame_top, text='Ok', command=self.press_button_ok) self.frame_top.button_ok.pack(side=LEFT) self.frame_top.button_quit = tk.Button(self.frame_top, text='Quit', command=self.master.destroy) self.frame_top.button_quit.pack(side=LEFT) self.frame_bottom.label_result_info = tk.Label(self.frame_bottom, text='Result:') self.frame_bottom.label_result_info.pack(side=LEFT) self.frame_bottom.label_result_var = tk.StringVar() self.frame_bottom.label_result_var.set('***') self.frame_bottom.label_result = tk.Label(self.frame_bottom, textvariable=self.frame_bottom.label_result_var) self.frame_bottom.label_result.pack(side=LEFT) def press_button_ok(self): entry_string = self.frame_top.entry_var.get() print(repr(entry_string)) self.frame_bottom.label_result_var.set(entry_string) def main(): root = App() root.master.title('Window') root.master.geometry('300x70+500+500') root.mainloop() if __name__ == '__main__': main()
Отредактировано py.user.next (Апрель 19, 2019 03:34:47)
Офлайн
Почему вы пишете в начале:
from tkinter import *
from tkinter import messagebox ?
Разве “*” не означает импортировать ВСЕ, в том числе и messagebox?
Вот тебе простой пример работы с Entryспасибо, но как сделать что бы можно было вводить только цифры?
def press_button_ok(self):
entry_string = self.frame_top.entry_var.get()
print(repr(entry_string))
self.frame_bottom.label_result_var.set(entry_string)
def press_button_ok(self):
entry_string = self.frame_top.entry_var.get()
print(repr(entry_string))
self.frame_bottom.label_result_var.set(entry_string)
s = entry_string*entry_string
print(s)
Она не шарит, как код писать и просто обмениваться им, но взялась учить кого-то.Да я и сам не шарю), мой опыт программирования примерно неделя).
Отредактировано white (Апрель 19, 2019 08:31:24)
Офлайн
whiteВводишь строку, потом после ввода эту строку передаёшь на проверку содержимого. Если проверка пройдена, то дальше уже строку приводишь к float, иначе выдаёшь сообщение об ошибке, очищаешь переменную, привязанную к Entry, и ждёшь нового ввода.
спасибо, но как сделать что бы можно было вводить только цифры?
whiteНадо привести строку к вещественному типу. Не надо привязывать числовые переменные к Entry, так как проверка может требовать многих разных действий. Числовые переменные используются в числовых вводах типа Spinbox, где точно строки быть не может.
как в дальнейшем использовать переменную entry_string?
if check_input(string): number = float(string) else: print_error_message('Incorrect value, need float: ' + string)
Отредактировано py.user.next (Апрель 19, 2019 11:20:45)
Офлайн
Вводишь строку, потом после ввода эту строку передаёшь на проверку содержимого. Если проверка пройдена, то дальше уже строку приводишь к float, иначе выдаёшь сообщение об ошибке, очищаешь переменную, привязанную к Entry, и ждёшь нового ввода. Для проверки строки можно использовать модуль re
Офлайн
from tkinter import * def printtext(): global e string = e.get() print(string) root = Tk() root.title('Name') e = Entry(root) e.pack() b = Button(root,text='okay',command=printtext) b.pack(side='bottom') root.mainloop()
Офлайн
Можно же рабоче-крестьянским методом сделать проверку: завернуть преобразование в try и всего-то делов. Например, как-то так:
try: number = float(string) except ValueError: # Сюда воткнуть вывод сообщения типа "Что за ерунду ты ввёл?" # далее сделать передачу фокуса ввода на entry, предварительно туда загнав значение "0" # или удалить неправильное значение или оставить как есть, чтобы пользователь исправил.
Отредактировано Rafik (Апрель 23, 2019 20:43:17)
Офлайн
Rafik
Можно же рабоче-крестьянским методом сделать проверку: завернуть преобразование в try и всего-то делов. Например, как-то так:
Офлайн
Можно же рабоче-крестьянским методом сделать проверку: завернуть преобразование в try и всего-то делов. Например, как-то так:
try: number = float(string) except ValueError: # Сюда воткнуть вывод сообщения типа "Что за ерунду ты ввёл?" # далее сделать передачу фокуса ввода на entry, предварительно туда загнав значение "0" # или удалить неправильное значение
def onKeyPress(event): symvol = getattr(event, 'char') # Получим символ нажатой клавиши if symvol != '.' and (symvol < '0' or symvol > '9') : # Если запрещённый символ # Сюда пишем команду убрать текущий символ из entry # как применить метод delete виджета entry придумай. Материал на эту тему имеется в гугле. tvoj_entry.bind('<KeyPress>', onKeyPress) # Привяжем событие KeyPress твоего enrty к функции onKeyPress
Отредактировано Rafik (Апрель 23, 2019 21:34:16)
Офлайн