Python Tkinter:如何向弹出窗口添加自定义边框

Python Tkinter:如何向弹出窗口添加自定义边框,python,python-2.7,tkinter,border,frame,Python,Python 2.7,Tkinter,Border,Frame,下面是我的代码示例。我不明白为什么我不能在弹出窗口周围创建一个薄的黑色边框 请注意,我特意使用self.top.overrideredirectTrue删除了默认边框。但是,我想重新创建一个薄层 请尝试以下Python 2.7: from Tkinter import Tk, Frame, Toplevel, Label class srcDestDescription(Frame): def __init__(self, parent): Frame.__init__(se

下面是我的代码示例。我不明白为什么我不能在弹出窗口周围创建一个薄的黑色边框

请注意,我特意使用self.top.overrideredirectTrue删除了默认边框。但是,我想重新创建一个薄层

请尝试以下Python 2.7:

from Tkinter import Tk, Frame, Toplevel, Label

class srcDestDescription(Frame):
   def __init__(self, parent):
      Frame.__init__(self, parent)
      self.top = Toplevel(parent)
      self.parent = parent
      self.top.overrideredirect(True)
      self.top.geometry('+%d+%d' % (350, 100))
      self.top.withdraw()
   def display(self):
      self.top.deiconify()
      topLabel = Label(self.top, text = "Hello World")
      topLabel.grid(column = 0, columnspan = 2, row = 0, sticky = 'NSWE', padx = 10, pady = (10, 5))
      topLabel.config(font = ('times', 14))

class Application(Frame):

   def __init__(self, parent):
      Frame.__init__(self, parent)
      self.parent = parent
      self.parent.geometry('%dx%d+%d+%d' % (300, 300, 0, 0))
      self.parent.resizable(0, 0)

      self.pack(expand = True)
      self.srcDestDescription = srcDestDescription(self)
      self.srcDestDescription.display()

def main():
   root = Tk()
   Application(root)
   root.mainloop()

if __name__ == '__main__':
   main()

以下是我的作品

from Tkinter import Tk, Frame, Toplevel, Label

class MyTop(Toplevel):
   def __init__(self, parent):
      Toplevel.__init__(self, parent)
      self.overrideredirect(True)
      self.withdraw()
      self.geometry('+%d+%d' % (350, 100))
      topLabel = Label(self, text="Hello World",
                       borderwidth=1, relief='solid')
      topLabel.pack(padx=10, pady=(10, 5))
      topLabel.config(font = ('times', 14))

class Application(Frame):

   def __init__(self, parent):
      Frame.__init__(self, parent)
      self.parent = parent
      self.parent.geometry('%dx%d+%d+%d' % (300, 300, 0, 0))
      self.parent.resizable(0, 0)

      self.pack(expand = True)
      self.mytop = MyTop(self.parent)
      self.mytop.deiconify()

def main():
   root = Tk()
   Application(root)
   root.mainloop()

if __name__ == '__main__':
   main()
在Pythonxy/lib/idlelib/ToolTip.py中可以找到基于Toplevel但带有非Toplevel子类的类的工具提示弹出窗口代码。复制这是你想用的。Idle的CalltipWindow弹出窗口类似,但有点复杂


获取薄边框弹出窗口的另一种方法是使用一个菜单实例,tk_popupself,x,y,entry=docstring将菜单放置在位置x,y处,并使用entry。。典型的用法是右键单击上下文菜单,但您发明了另一种用法。Idle示例是Pythonxy/Lib/idlelib/EditorWindow.py,EditorWindow.right\u menu\u事件。

尝试显示未放置、打包或网格化的帧是无用的。使用这些几何方法之一,可以在Tk或Toplevel或子代中显示帧。Toplevel.overrideredirectTrue,不关于边框。它告诉窗口管理器忽略顶层。若要修改上述注释,忽略顶层会隐藏整个窗口框架,顶部栏包括图标、标题和窗口按钮。所以,若你们指的是边框的窗框,你们是对的,但你们必须把东西放进去才能看到任何东西。我正在编写示例代码。在示例中,您只需将标签配置为borderwidth=1,relief='solid'。我想要的是弹出窗口周围的边框。弹出窗口周围的边框正是上面代码中的边框。您可以跳过Toplevel的几何图形,在Toplevel中打包一个可见大小的框架或画布,并将所需的小部件放在容器中的任何位置。