Найти - Пользователи
Полная версия: Вопрос по Tkinter
Начало » GUI » Вопрос по Tkinter
1 2
jeka7
Всем привет! Такая задача! Есть главное окно, в нем находится entry1 и button нужно чтобы после нажатия на кнопку появлялось новое окно и в нем количество entry равное числу введенном в entry1
Вот заготовка:
# -*- coding: UTF-8 -*-
from Tkinter import *
def button_clicked(ev):
    n = int(ent1.get()) 
    win = Toplevel(root)   
    ent = Entry(win,width=20,bd=3,font='arial 14')
    # Равное числу введенном в ent1  
    ent.grid(in_=win,row=1,column=1) # между строками желателен интервал
    
    win.mainloop()
    
root = Tk()
btn = Button(root,text='Далее',
              width=5,height=2,bg='white',fg='black',font='arial 14')
ent1 = Entry(root,width=20,bd=3,font='arial 14')
ent1.pack()
btn.pack()
btn.bind('<Button-1>',button_clicked)
root.mainloop()
4kpt
Если я правильно понял….
# -*- coding: UTF-8 -*-

import Tkinter

def button_clicked(ev):
n = int(ent1.get())
win = Tkinter.Toplevel(root)
win.focus_force()
all_ent = []
for i in xrange(n):
ent = Tkinter.Entry(win, width=20, bd=3, font='arial 14')
ent.grid(in_=win, row=i+1, column=1, pady=10)
all_ent.append(ent)

win.mainloop()

root = Tkinter.Tk()
btn = Tkinter.Button(root, text='Далее', width=5, height=2, bg='white', fg='black', font='arial 14')
ent1 = Tkinter.Entry(root, width=20, bd=3, font='arial 14')
ent1.focus_force()
ent1.pack()
btn.pack()
btn.bind('<Button-1>', button_clicked)
root.mainloop()
jeka7
Да, все правильно!
Спасибо!
4kpt
На здоровье…
jeka7
4kpt
А как можно сделать, чтоб я введя значения в entry получил готовый список с этими значениями?
4kpt
Лови…
Забыл сказать. На программу хватит и одного mainloop. Окна верхнего уровня (Toplevel) не требуют выполнения этого метода. Кроме того, я добавил обработку исключения (в случае если пользователь ввел неверные данные). И поигрался с фокусом…
import Tkinter

def button_clicked(ev):
n = None
try: n = int(ent1.get()) # Проверь, правильное значение ли тебе передал пользователь
except: print u"Не введено число!!!" # Обработай исключение...
if n != None:
win = Tkinter.Toplevel(root)
all_ent = []
for i in xrange(n):
var = Tkinter.StringVar()
var.set(n)
ent = Tkinter.Entry(win, width=20, bd=3, font='arial 14', textvariable = var)
ent.grid(in_=win, row=i+1, column=1, pady=10)
if i == 0:
ent.focus_force()
all_ent.append(ent)
else:
ent1["bg"] = "red"

root = Tkinter.Tk()
btn = Tkinter.Button(root, text='Далее', width=5, height=2, bg='white', fg='black', font='arial 14')
ent1 = Tkinter.Entry(root, width=20, bd=3, font='arial 14')
ent1.focus_force()
ent1.pack()
btn.pack()
btn.bind('<Button-1>', button_clicked)
root.mainloop()
jeka7
За проверку значения спасибо! Но я хотел немного другое: в первом окне я ввожу количество строк которое появится во втором окне (они создаются пустыми), а после того как я введу значения я получил список с значениями.
4kpt
Ну прости, я тебя так понял. Что ты конкретно хочешь. Чтобы после ввода всех новых полей у тебя создавался список с введенными значениями???
jeka7
Ну вообще у меня проблем была с созданием нескольких строк для ввода значений, в моей проге есть еще кнопка в Toplevel(которую я убрал) , после нажатия на которую производится сортировка и расчет значений.
Мне после ввода значений нужно получить список. Пробовал оперировать со списком all_ent но там только адреса памяти.
4kpt
Ну тогда так…

import Tkinter

def button_clicked(event = None):
def get_data(event = None):
for res in all_ent:
print res.get()

n = None
try: n = int(ent1.get()) # Проверь, правильное значение ли тебе передал пользователь
except: print u"Не введено число!!!" # Обработай исключение...
if n != None:
win = Tkinter.Toplevel(root)
all_ent = []
for i in xrange(n):
#var = Tkinter.StringVar()
ent = Tkinter.Entry(win, width=20, bd=3, font='arial 14')
ent.grid(row=i+1, column=1, pady=10)
if i == 0:
ent.focus_force()
all_ent.append(ent)
but = Tkinter.Button(win, text = "Снять данные")
but.bind("<Button-1>", get_data)
but.grid(row = i + 2, column = 1, pady = 10)
else:
ent1["bg"] = "red"

root = Tkinter.Tk()
btn = Tkinter.Button(root, text='Далее', width=5, height=2, bg='white', fg='black', font='arial 14')
ent1 = Tkinter.Entry(root, width=20, bd=3, font='arial 14')
ent1.focus_force()
ent1.pack()
btn.pack()
btn.bind('<Button-1>', button_clicked)
root.mainloop()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB