如何在 tkinter python 中的 TopLevel window 上放置一个按钮?

How to place a button on the TopLevel window in tkinter python?

为像我这样的其他无辜新手指出的答案 在 python2,我们有 Tkinter 在 python3 中,我们有 tkinter。

注意大小写的不同。这就是错误出现的原因。

我有两个屏幕:window(子)和根(主) 我正在尝试在方法创建的 "window" 屏幕上放置一个按钮:command()。我写了这段代码。

from tkinter import *

root = Tk()
def writeText():
    print "hello"
def command():
    window=Toplevel(root)
    Button(window,text="Button2",command=writeText).grid()
    Label(window,text="hello").grid()

button = Button(root, text="New Window", command=command)
button.grid()

root.mainloop()

但是这个button2没有出现在第二个屏幕上。同时,标签出现在这个屏幕上。控件将进入 writeText() 函数。

当我从 window 屏幕的按钮中删除命令参数时,该按钮出现。

谁能帮我解决这个问题?

这是我的建议。

根据您的问题,您输入了 from tkinter import *,但是您在标签中输入了 Python 2.7。这是矛盾的,因为 tkinter(全部小写)用于 Python 3.x 而 Tkinter 应该用于 python 2.x。那就是说先尝试修复你的导入。如果您实际上正在使用 Python 3 那么您将需要更正您的打印语句以包含括号。 print("hello")

2nd 我会尝试更密切地关注 PEP8,但是在这种情况下,我没有看到任何异常情况会导致此问题。

以我下面的例子为例,如果您仍然遇到同样的问题,请告诉我。

Python 2.x 示例:

import Tkinter as tk # Upper case T in Tkinter for Python 2.x


root = tk.Tk()

def write_text():
    print "hello"

def command():
    window = tk.Toplevel(root)
    tk.Button(window,text="Button2",command=write_text).grid()
    tk.Label(window,text="hello").grid()

button = tk.Button(root, text="New Window", command=command)
button.grid()

root.mainloop()

Python 3.x 示例:

import tkinter as tk # all lowercase tkinter for Python 3.x


root = tk.Tk()

def write_text():
    print("hello") # Python 3.x requires brackets for print statements.

def command():
    window = tk.Toplevel(root)
    tk.Button(window,text="Button2",command=write_text).grid()
    tk.Label(window,text="hello").grid()

button = tk.Button(root, text="New Window", command=command)
button.grid()

root.mainloop()

如果您仍然遇到问题,能否告诉我您使用的是 Windows、Linux 还是 Mac?

你们试过Toplevel上的图片按钮吗?它似乎不能在 Toplevel 上使用下面的代码(提示 windows)。根级别没问题。

tp = Toplevel()
tp.geometry("400x400")

btnphotoAdd=PhotoImage(file="32adduser.png")
btnAdd = Button(tp, text="Add User", font="Helvetica 20 bold", image=btnphotoAdd,compound=TOP)
btnAdd.grid(row=10, column=0, sticky=W)