Pwm MegaWidgets 在销毁小部件时不起作用

Pwm MegaWidgets do not work in destroy widgets

我尝试下面的代码,我收到“_tkinter.TclError:错误的 window 路径名“.!frame.!frame.!entry” 目的是当我按下按钮

时组合框 megawidget 出现在地震 window 中
enter code here


  from tkinter import *

  import Pmw

  class engineer(object):

  def __init__(self,quake,parent):
     self.quake=quake
     self.parent=parent
    
  def arent(self):
    self.parent=Tk()
    self.parent.geometry('200x200')
    self.ba=Button(self.parent,text='display',command=self.combo)
    self.ba.grid()
    
def zone_define(self,a):
    print(a)

def combo(self):
    self.quake=Tk()
    self.quake.geometry('200x200')
    zone=["I", "II", "III"]
 
combobox=Pmw.ComboBox(self.quake,label_text='Play',label_bg='white',labelmargin=0,labelpos='wn',
     label_relief=FLAT,listbox_width=24,selectioncommand=self.zone_define)
     combobox.grid()
     combobox.selectitem(asply[1])
     self.quake.mainloop()
if __name__=='__main__':
    gr=engineer(None,None)
    gr.arent()

好的,由于您多次定义 Tk() ,因此会产生错误。这每次都会创建一个新的 window,这将产生冲突的更改。

我之前有过类似的错误,我通过简单地删除第二个 Tk() 来修复它。

我尝试使用 Toplevel 小部件而不是 TK() 并开始工作。我认为这是一个很好的解决方案 这是解决方案。注意combo函数

从 tkinter 导入 * 输入 Pmw class 工程师(object): def init(self,quake,parent): self.quake=地震 self.parent=parent

def arent(self):
    self.parent=Tk()
    self.parent.geometry('200x200')
    

    self.ba=Button(self.parent,text='ana',command=self.combo)
    self.ba.grid()
    
def zone_define(self,a):
    print(a)

def combo(self):
    self.quake=Toplevel()
    self.quake.geometry('200x200')
    zone=["I", "II", "III"]
  
        
     combobox=Pmw.ComboBox(self.quake,label_text='Play',label_bg='white',
            labelmargin=0, labelpos='wn',label_relief=FLAT,
            listbox_width=24,selectioncommand=self.zone_define,
             scrolledlist_items=zone,  
            arrowbutton_bg='white',arrowbutton_relief=FLAT,
             arrowbutton_highlightcolor='white',arrowbutton_bd=0)
    combobox.grid()
    combobox.selectitem(zone[0])
    self.quake.mainloop()
if __name__=='__main__':
    gr=engineer(None,None)
    gr.arent()