Форум сайта python.su
Есть корневой виджет root = Tk(), если в него поместить checkbutton с variable в виде StringVar() все работает.
Проблема:
создаю в корневом виджете дополнительный виджет который должне появляться по запросу пользователя, н-р виджет содержащий дополнительные настройки (в виде галочек checkbutton), назначаю ему variable, связываю checkbutton с кнопкой и переменная variable в трам-тарары (если точнее команда print variable.get() - выдает пустой символ)
Так должно быть или я что-то не правильно делаю подскажите кто знает???
Не рабочий вариант:
def pr():
global g
g = StringVar()
ro = Tk()
q = checkbutton(ro, variable=g, onvalue='y', offvalue='n').bind('<Button-1>', res).grid() ну и все такое прочее
ro.mainloop()
def res(event):
print(g.get()) - выводит пустой символ
root = Tk()
всплывающее меню которое вызывает функцию pr (вверху)
root.mainloop()
Офлайн
bastionПокажите рабочий, если не сложно. Интересно посмотреть, каким образом это вообще работает
Не рабочий вариант:
Отредактировано (Апрель 4, 2011 10:34:42)
Офлайн
q = checkbutton(ro, variable=g, onvalue='y', offvalue='n').bind('<Button-1>', res).grid()
нельзя так делать
Офлайн
“каким образом это вообще работает” - это работает если checkbutton прописан в основном виджете
“нельзя так делать” - это условность там код написан окуратно.(с новой строки .bind() потом опять с новой строки grid(row=0, column=0))
повторюсь в синтаксисе ошибок нет, если checkbutton прописан в основной виджет variable выводится в терминал, как тоолько прописываю во вспомогательный виджет выводит в терминал пустой символ
Моя вина, даю полный код одной из попыток выяснить проблему
#! /usr/bin/env python3.1
# coding: utf8
from tkinter import *
class gg:
def __init__(self):
global g
g = StringVar()
self.g = g
def menu(self, event):
ro = Tk()
ch = Checkbutton(ro, text='eXample', variable=self.g, onvalue='y', offvalue='n')
ch.grid(row=0, column=0)
ch.select()
b = Button(ro, text='Save', width=8)
b.bind('<Button-1>', start.pr)
b.grid(row=1, column=0)
ro.mainloop()
def pr(self, event):
print(g.get())
root = Tk()
start = gg()
bs = Button(root, width=10, text='connect')
bs.grid(row=0, column=0)
bs.bind('<Button-1>', start.menu)
root.mainloop()
Отредактировано (Апрель 4, 2011 11:07:09)
Офлайн
Вот и заработало
from Tkinter import *
class gg:
def __init__(self):
global g
g = StringVar()
self.g = g
def menu(self, event):
ro = Toplevel()
ch = Checkbutton(ro, text='eXample', variable=self.g, onvalue='y', offvalue='n')
ch.grid(row=0, column=0)
ch.select()
b = Button(ro, text='Save', width=8)
b.bind('<Button-1>', start.pr)
b.grid(row=1, column=0)
def pr(self, event):
print(g.get())
root = Tk()
start = gg()
bs = Button(root, width=10, text='connect')
bs.grid(row=0, column=0)
bs.bind('<Button-1>', start.menu)
root.mainloop()
Офлайн
“Вы создавали два экземпляра Tk (smth = Tk())”
спасибо, очень благодарен за ваш опыт и увеличение моего
недостаточно сообразителен я оказался в tkinter
Отредактировано (Апрель 4, 2011 11:41:33)
Офлайн
Подскажите, пожалуйста!
Только начал изучать питон.
Как этот код офрмить с помощью цикла, чтобы не прописывать все в ручную. У меня никак не получается.
Может кто нибудь поможет. Ерунда конечно, но для меня проблема…
from tkinter import * import shelve db = shelve.open('class_shelve_pn') iossel = db['iossel'] shapin = db['shapin'] shichkov = db['shichkov'] root=Tk() var1=IntVar() var2=IntVar() var3=IntVar() def change(): if var1.get() == 1: iossel.AddCounte() if var2.get() == 1: shapin.AddCounte() if var3.get() == 1: shichkov.AddCounte() check1=Checkbutton(root,text=(db['iossel']),variable=var1,onvalue=1,offvalue=0) check2=Checkbutton(root,text=(db['shapin']),variable=var2,onvalue=1,offvalue=0) check3=Checkbutton(root,text=(db['shichkov']),variable=var3,onvalue=1,offvalue=0) button = Button(text="Изменить", command=change) check1.pack() check2.pack() check3.pack() button.pack() root.mainloop() db['iossel'] = iossel db['shapin'] = shapin db['shichkov'] = shichkov db.close()
Отредактировано Maxio777 (Июль 29, 2018 01:51:50)
Офлайн
Я так понял тут никто не знает про теги для кода?
# Life loop while alive: if (fun > boredom) and money: pass_day(fun, boredom, money) continue else: break
Офлайн