Я прикрепил рабочую версию вашего кода ниже. Вы можете обратиться к нему, чтобы узнать, где вы ошиблись. Как правило, вы должны помнить о том, как вы структурируете свой код, если используете формат класса. Это поможет вам лучше визуализировать свой код и отлаживать его. Вы можете прочитать это обсуждение, чтобы помочь вам.
from Tkinter import *
import tkMessageBox
class AVAGnome(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
# create frames
self.F1 = Frame(self, padx=5, pady=5, bg='red')
# checkbutton
self.AVAselected = IntVar()
self.AVAselected.trace("w", self.toggleAVA)
self.AVAbutton = Checkbutton(
self.F1, text='AVA', indicatoron=0, width=10,
variable=self.AVAselected)
# start layout procedure
self.F1.pack(side=TOP, fill=BOTH, anchor=NW)
self.AVAbutton.pack(side=LEFT) #entry and buttons
def toggleAVA(self, *args):
if (self.AVAselected.get()):
avastatus = "selected"
else:
avastatus = "unselected"
tkMessageBox.showinfo("AVA status", avastatus)
if __name__ == '__main__':
rootGnome = Tk()
rootGnome.title('AVAGnome')
gnomeUI = AVAGnome(rootGnome)
gnomeUI.pack(fill="both", expand=True)
gnomeUI.mainloop()
Обновление: приведенная выше структура кода предназначена для отдельной программы tkinter. Я пытаюсь преобразовать этот рабочий код, чтобы следовать примеру плагина Pymol. Пересмотренный код размещен ниже и подлежит дальнейшему пересмотру.
# https://pymolwiki.org/index.php/Plugins_Tutorial
# I adapted from the example in the above link and converted my previous code to
#
from Tkinter import *
import tkMessageBox
def __init__(self): # The example had a self term here.
self.open_GnomeUI()
class AVAGnome(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
# create frames
self.F1 = Frame(self, padx=5, pady=5, bg='red')
# checkbutton
self.AVAselected = IntVar()
self.AVAselected.trace("w", self.toggleAVA)
self.AVAbutton = Checkbutton(
self.F1, text='AVA', indicatoron=0, width=10,
variable=self.AVAselected)
# start layout procedure
self.F1.pack(side=TOP, fill=BOTH, anchor=NW)
self.AVAbutton.pack(side=LEFT) #entry and buttons
def toggleAVA(self, *args):
if (self.AVAselected.get()):
avastatus = "selected"
else:
avastatus = "unselected"
tkMessageBox.showinfo("AVA status", avastatus)
# Note, I added a "self" term throughout function.
# Try w/ & w/o "self" to see which works.
def open_GnomeUI(self):
self.rootGnome = Tk()
self.rootGnome.title('AVAGnome')
self.gnomeUI = AVAGnome(self.rootGnome)
self.gnomeUI.pack(fill="both", expand=True)
self.gnomeUI.mainloop()
person
Sun Bear
schedule
24.01.2017
Checkbutton
имеет вариантcommand=
, поэтому, возможно, используйтеcommand=self.toggleAVA
вместоtrace()
- person furas   schedule 24.01.2017self.AVAselected
другим способом. В любом случае, я пытаюсь понять, почему функция, которая должна работать, не работает. - person ipetrik   schedule 24.01.2017command
), и статусself.AVAselected
сообщается какunselected
независимо от того, нажата кнопка или нет. - person ipetrik   schedule 24.01.2017Tk()
и дваmainloop()
. Возможно, вам нужно просто использоватьToplevel()
вместоTk()
для создания окна. - person furas   schedule 24.01.2017