简体   繁体   English

Tkinter Button 没有出现在 TopLevel 上?

[英]Tkinter Button does not appear on TopLevel?

This is a piece of code I write for this question: Entry text on a different window?这是我为这个问题写的一段代码: Entry text on a different window?

It is really strange what happened at mySubmitButton , it appears that the button does not want to appear when it is first started, it will, however appear when you click on it. mySubmitButton发生的事情真的很奇怪,该按钮似乎不想在第一次启动时出现,但是当您单击它时它会出现。 Even if you click on it and release it away from the button, that way it won't be send.即使您单击它并从按钮上松开它,也不会发送它。 I am suspecting if this only happen on a mac, or it only happen to my computer, because it is a very minor problem.我怀疑这是否只发生在 Mac 上,或者它只发生在我的电脑上,因为这是一个非常小的问题。 Or it is something silly I did with my code.或者这是我对我的代码所做的愚蠢的事情。

self.mySubmitButton = tk.Button(top, text='Hello', command=self.send)
self.mySubmitButton.pack()

Am I missing something?我错过了什么吗? I googled and found this question and answer on daniweb .我用谷歌搜索并在 daniweb 上找到了这个问题和答案 And I do a diff on them, can't figure out what he did "fixed", but I did see the line is changed to command=root.quit .我对它们进行了比较,无法弄清楚他做了什么“修复”,但我确实看到该行已更改为command=root.quit But it is different from mine anyway...但无论如何,它与我的不同......

Here is the full source code, and there is no error message, but the button is just missing.这是完整的源代码,没有错误消息,但只是缺少按钮。

import tkinter as tk

class MyDialog:
    def __init__(self, parent):
        top = self.top = tk.Toplevel(parent)
        self.myLabel = tk.Label(top, text='Enter your username below')
        self.myLabel.pack()

        self.myEntryBox = tk.Entry(top)
        self.myEntryBox.pack()

        self.mySubmitButton = tk.Button(top, text='Hello', command=self.send)
        self.mySubmitButton.pack()

    def send(self):
        global username
        username = self.myEntryBox.get()
        self.top.destroy()

def onClick():
    inputDialog = MyDialog(root)
    root.wait_window(inputDialog.top)
    print('Username: ', username)

username = 'Empty'
root = tk.Tk()
mainLabel = tk.Label(root, text='Example for pop up input box')
mainLabel.pack()

mainButton = tk.Button(root, text='Click me', command=onClick)
mainButton.pack()

root.mainloop()

在此处输入图像描述

在此处输入图像描述

  1. Adding another button right after this one, the second one actually appear.在这个按钮之后添加另一个按钮,第二个按钮实际上出现了。 I thought it might be because I didn't call the same function, but I called the same one and it does the exact same thing it appears...我想这可能是因为我没有调用同一个 function,但我调用了同一个,它做的事情和它看起来完全一样......
  2. Adding a empty label between them, doesn't work.在它们之间添加一个空的 label 是行不通的。 The button still isn't being draw.该按钮仍未绘制。

在此处输入图像描述

PS: I am using Mac OS 10.5.8, and Tk 8.4.7. PS:我使用的是 Mac OS 10.5.8 和 Tk 8.4.7。

I see the hello button, but I'm on windows 7.我看到问候按钮,但我正在拨打 windows 7。

I did a quick re-write of your example.我快速重写了您的示例。 I'll be curious if it makes any difference for you.我很好奇这对你是否有任何影响。

import tkinter as tk

class GUI(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)

        mainLabel = tk.Label(self, text='Example for pop up input box')
        mainLabel.pack()

        mainButton = tk.Button(self, text='Click me', command=self.on_click)
        mainButton.pack()

        top = self.top = tk.Toplevel(self)
        myLabel = tk.Label(top, text='Enter your username below')
        myLabel.pack()

        self.myEntryBox = tk.Entry(top)
        self.myEntryBox.pack()

        mySubmitButton = tk.Button(top, text='Hello', command=self.send)
        mySubmitButton.pack()

        top.withdraw()

    def send(self):
        self.username = self.myEntryBox.get()
        self.myEntryBox.delete(0, 'end')
        self.top.withdraw()
        print(self.username)

    def on_click(self):
        self.top.deiconify()

gui = GUI()
gui.mainloop()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM