Как разместить кнопку в окне TopLevel в tkinter python?

У меня есть два экрана: окно (дочерний) и root(мастер). Я пытаюсь разместить кнопку на "оконном" экране, созданном методом: 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()

Но эта кнопка2 не появляется на втором экране. Тем временем на этом экране появляется ярлык. И элемент управления переходит в функцию writeText().

И когда я удаляю аргумент команды из экрана кнопки окна, кнопка появляется.

Может кто-нибудь, пожалуйста, помогите мне с этим?

1 ответ

Вот мое предложение.

С вашего вопроса вы поставили from tkinter import * Однако в ваших тегах вы положили Python 2.7, Это противоречиво, потому что tkinter(все строчные буквы) используется в Python 3.x и Tkinter вместо этого следует использовать для Python 2.x. Тем не менее попробуйте исправить ваш импорт в первую очередь. Если вы на самом деле используете Python 3, вам нужно будет исправить оператор печати, включив в него скобки. 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?

Ребята, вы когда-нибудь пробовали кнопку с изображением на Toplevel? Кажется, это не может быть работать с кодом ниже на Toplevel(Prompt Out 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)
Другие вопросы по тегам