Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 19, 2018 09:55:31

frogling
Зарегистрирован: 2018-01-19
Сообщения: 8
Репутация: +  0  -
Профиль  

Help Me!!! Please

Я новичок в Python. Один из модулей - фрейм для ввода данных.
Не понятная ошибка.
Ввожу данные в окне виджета minX. они тут же появляются в окне виджета minY.
Аналогично для виджетов maxX и maxY
Почему так происходит????? Помогите разобраться

from tkinter import *
from tkinter.messagebox import showerror

# Функция проверяет строку на представление целого числа
def strIsNumber(string):
s = delSpase(string) # Удаляем пробелы
i = s.find('-') # В начале строки стоит знак минус?
if i > 0:
return False # Знак минус в середине строки
elif i == 0 and len(s) == 1: # В строке только знак минус
return True
elif i == 0 and len(s) > 1:
s = s
if s.isdecimal():
return True
else:
return False
elif len(s) > 0 and s.isdecimal():
return True
else:
return False


# функция удаляет пробельные символы в начале и конце строки
def delSpase(string):
s = string.lstrip()
return s.rstrip()

class LimitInput(Frame):
def __init__(self, parent):
Frame.__init__(self,parent)
self.parent = parent
self.minX = None
self.maxX = None
self.minY = None
self.maxY = None
self.initUI()

def initUI(self):
self.parent.config(bd = 10, relief = RAISED)
self.pack(fill=BOTH, expand=True)
# Заголовки для полей ввода
Label(self, text = ‘Диапазон Х’).grid(row = 0, column = 0, columnspan = 4, padx = 5, pady = 5)
Label(self, text = ‘Диапазон Y’).grid(row = 0, column = 4, columnspan = 4, padx = 5, pady = 5)

# Поле ввода минимального значения Х
Label(self, text = ‘От’).grid(row = 1, column = 0, padx = 5, pady = 5)
self.minX = Entry(self, bd =5, width = 5, text = ‘-10’)
self.minX.grid(row = 1, column = 1, padx = 5, pady = 5)
self.minX.bind('<KeyRelease>', self.onChangeValue) # Обработка событий изменения текста в поле ввода

# Поле ввода максимального значения Х
Label(self, text = ‘До’).grid(row = 1, column = 2, padx = 5, pady = 5)
self.maxX = Entry(self, bd = 5, width =5, text = ‘10’)
self.maxX.grid(row = 1, column = 3, padx = 5, pady = 5)
self.maxX.bind('<KeyRelease>', self.onChangeValue) # Обработка событий изменения текста в поле ввода

# Поле ввода минимального значения Y
Label(self, text = ‘От’).grid(row = 1, column = 4, padx = 5, pady = 5)
self.minY = Entry(self, bd =5, width = 5, text = ‘-10’)
self.minY.grid(row = 1, column = 5, padx = 5, pady = 5)
self.minY.bind('<KeyRelease>', self.onChangeValue) # Обработка событий изменения текста в поле ввода

# Поле ввода максимального значения Y
Label(self, text = ‘До’).grid(row = 1, column = 6, padx = 5, pady = 5)
self.maxY = Entry(self, bd = 5, width =5, text = ‘10’)
self.maxY.grid(row = 1, column = 7, padx = 5, pady = 5)
self.maxY.bind('<KeyRelease>', self.onChangeValue) # Обработка событий изменения текста в поле ввода

self.btnExec = Button(self, text = ‘Выполнить’, command = self.mainCommand)
self.btnExec.config(bd=5, relief=RAISED)
self.btnExec.grid(row = 2, column = 2, columnspan = 4)

def onChangeValue(self, event):
wg = event.widget
s = wg.get()
isNum = strIsNumber(s)
if not isNum:
showerror('Ошибка ввода', ‘Должно быть целое число, имеем: ’ + s)

def checkValues(self):
eMin = int(self.minX.get())
eMax = int(self.maxX.get())
if eMin > eMax:
showerror('Ошибка ввода',
‘Максимальное значение X должно быть больше минимального’)
return
eMin = int(self.minY.get())
eMax = int(self.maxY.get())
if eMin > eMax:
showerror('Ошибка ввода',
‘Максимальное значение Y должно быть больше минимального’)
return

def mainCommand(self):
self.checkValues()

def getDeltaX(self):
eMin = int(self.minX.get())
eMax = int(self.maxX.get())
return (eMin, eMax)

def getDeltaY(self):
eMin = int(self.minY.get())
eMax = int(self.maxY.get())
return (eMin, eMax)

if __name__ == ‘__main__’:
root = Tk()
frame = Frame(root)
limitInput = LimitInput(frame)
frame.pack()
root.mainloop()

Офлайн

#2 Янв. 19, 2018 11:54:04

rami
Зарегистрирован: 2018-01-08
Сообщения: 281
Репутация: +  72  -
Профиль   Отправить e-mail  

Help Me!!! Please

Из всех полей ввода Entry нужно удалить text =

 # Поле ввода минимального значения Х
        Label(self, text = 'От').grid(row = 1, column = 0, padx = 5, pady = 5)
        self.minX = Entry(self, bd =5, width = 5) #, text = '-10')  <— удалить text = '-10' из всех Entry
        self.minX.grid(row = 1, column = 1, padx = 5, pady = 5)
        self.minX.bind('<KeyRelease>', self.onChangeValue) # Обработка событий изменения текста в поле ввода

Офлайн

#3 Янв. 19, 2018 14:25:36

frogling
Зарегистрирован: 2018-01-19
Сообщения: 8
Репутация: +  0  -
Профиль  

Help Me!!! Please

Спасибо. Все заработало.
Ведь действительно у Entry не поля - text. Однако как не странно tkinter при этом видимо создает закулисную переменную, типа StringVar, и связывает ее с этим виджетом. И, поскольку при этом вводимая величина была одинакова для обоих виджетов, то средства оптимизации tkinter связали оба виджета с одной и той же переменной. Если полю text присвоить различные значения, то описанного выше эфекта не будет.
Еще раз спасибо за оперативную подсказку!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version