【问题标题】:Tkinter Toplevel inf different file/functionTkinter Toplevel inf 不同的文件/函数
【发布时间】:2021-07-07 12:49:05
【问题描述】:

我正在尝试创建一个顶层窗口,但是,这个顶层窗口是从函数内同一目录中的不同文件调用的。

抱歉,我绝不是 tkinter 或 python 大师。这是代码的两部分。 (sn-ps)

#文件 1(主要)

import tkinter as tk
from tkinter import *
import comm1
from comm1 import com1

root = tk.Tk()
root.title("")
root.geometry("1900x1314")

#grid Center && 3x6 configuration for correct gui layout
root.grid_rowconfigure(0, weight=1)
root.grid_rowconfigure(11, weight=1)
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(11, weight=1)

#background image
canvas = Canvas(root, width=1900, height=1314)
canvas.place(x=0, y=0, relwidth=1, relheight=1)
bckground = PhotoImage(file='img.png')
canvas.create_image(20 ,20 ,anchor=NW, image=bckground)

#command to create new Toplevel
btn1 = tk.Button(root, text='Top', command=com1, justify='center', font=("Arial", 10))
btn1.config(anchor=CENTER)
btn1.grid(row=4, column=1)

#文件 2(顶层)

#command for new window
def com1():
    newWindow1 = Toplevel(root)
    newWindow1.title("")
    newWindow1.geometry("500x500")
    entry1 = tk.Entry(root, justify='center' , font=("Arial", 12), fg="Grey")
    newWindow1.pack()
    newWindow1.mainloop()

奇怪的部分是它完美地运行了几分钟,并且没有更改任何代码它只是停止工作。 我哪里错了?

【问题讨论】:

  • newWindow1.pack() 应该是entry1.pack()
  • 我认为你应该在调用函数时传入root,因为现在root 没有定义。也代替entry1 = tk.Entry(root, ...) 使用entry1 = tk.Entry(newWindow1, ...)
  • 哦,谢谢您的反馈!是的,这绝对是一个错误。

标签: python tkinter toplevel


【解决方案1】:

您需要将root 作为参数传递给com1

另外,您只需要启动一次mainloop,这可能应该在主文件中。您不需要在每次创建新窗口时都调用它。

【讨论】:

    【解决方案2】:

    感谢所有回答的人, 决定在单个文件中以更好的结构绕过该问题。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多