0

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

注意外壳的区别。这就是为什么会出现错误的原因。

我有两个屏幕:window(child) 和 root(master) 我试图在由方法创建的“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() 函数。

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

谁能帮我解决这个问题?

4

2 回答 2

1

这是我的建议。

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

第二,我会尝试更密切地关注 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?

于 2018-07-12T15:36:54.630 回答
1

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

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)
于 2019-03-03T08:58:58.497 回答