用Tkin在子窗口内部创建标签

2024-09-29 19:31:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道为什么会发生这种情况,但我正在尝试从菜单栏中用Tkinter创建一个“选项”子窗口。子窗口弹出,但当我试图在子窗口中创建标签时,该标签出现在主窗口上。。。我不知道为什么会这样。我在网上搜索了一段时间,找不到问题的答案。这是密码。在

class slot(Frame):
def __init__(self):
    self.root = Frame.__init__(self)
    # Set up the main window and the variables 
    self.master.title("Slot Machine")
    # Open in full screen
    self.w, self.h = self.master.winfo_screenwidth(), self.master.winfo_screenheight()
    self.master.geometry("%dx%d+0+0" % (self.w, self.h))
    # Add the drop down menu
    menubar = Menu(self.master)
    self.master.config(menu=menubar)
    fileMenu = Menu(menubar)
    fileMenu.add_command(
        label="New Game", 
        command=self.__init__,
        underline = 0
    )
    fileMenu.add_command(
        label="Options", 
        command=self.newStartingValue,
        underline = 0
    )
    fileMenu.add_command(
        label="Exit", 
        command=self.quit,
        underline = 0
    )
    fileMenu.add_separator()
    menubar.add_cascade(
        label = "File", 
        menu = fileMenu, 
        underline = 0
    )
    helpMenu = Menu(menubar)
    helpMenu.add_command(
        label="About...", 
        command=self.showHelp,
        underline = 0
    )
    menubar.add_cascade(label="Help", menu = helpMenu, underline = 0)
    # Manage the main window and center everything
    self.grid(sticky = W+E+N+S)
    self.master.rowconfigure(0, weight = 1)
    self.master.columnconfigure(0, weight = 1)
    for i in xrange(4):
        self.rowconfigure(i, weight = 1)
    for i in xrange(3):
        self.columnconfigure(i, weight = 1)

def showHelp(self):
    showinfo("About", "The One Armed Bandit is a simplistic slot machine game")
def newStartingValue(self):
    self._optionsPanel = Toplevel(self.root)
    self._optionsPanel.title("Options")
    self._optionsPanel.grid()
    self._optionsPanelLabel = Label(self, text = "New Pot Starting Value").pack()
    self._optionsPanelLabel.grid(row=0,column=1)

我尽量只显示必要的细节。我想这应该能帮你弄清楚。如果没有,我可以粘贴所有代码,如果需要。 我不明白为什么标签没有放入self.\u optionsPanel对象。在


Tags: theselfmasteraddinitdef标签label
2条回答

最后两行代码中至少有三个问题:

self._optionsPanelLabel = Label(self, text = "New Pot Starting Value").pack()
self._optionsPanelLabel.grid(row=0,column=1)

首先,将self作为父级传递给Label。如果你想让它出现在self._optionsPanel上,你必须将这个作为父对象传递给。在

第二,pack返回None,因此self._optionsPanelLabel将是{},因此调用{}的尝试将异常回溯打印到stderr,并立即退出函数。我敢打赌,你在代码中多次犯同样的错误,所以你可能有各种各样的错误。在

第三,不能在同一个小部件上调用pack和{}。或者,更确切地说,你可以,但是一旦你这样做了,pack就被撤消了。(这会破坏同一容器中的任何其他小部件packed,因此在多个小部件上同时调用pack和{}是一个更大的问题。)

在下一行中,代码在self(主窗口内的框架)内创建Label小部件。在

self._optionsPanelLabel = Label(self, text = "New Pot Starting Value").pack()

将其替换为(将新顶层设置为其父级):

^{pr2}$

相关问题 更多 >

    热门问题