Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当Python Tk是一个函数时,为什么默认文本输入不起作用?_Python_Tkinter_Tkinter Entry - Fatal编程技术网

当Python Tk是一个函数时,为什么默认文本输入不起作用?

当Python Tk是一个函数时,为什么默认文本输入不起作用?,python,tkinter,tkinter-entry,Python,Tkinter,Tkinter Entry,我想知道为什么默认文本没有出现在输入字段上。在同一屏幕上,一切正常。问题是当我从另一个文件调用函数时。我有一个调用函数的菜单,所有内容看起来都很好,但不是默认文本。主菜单文件包含文件夹中的导入文件。这是我的代码: __author__ = 'jordiponsisala' import tkinter as tk import tkinter.ttk as ttk from tkinter import* def mnuArticles(): def provaD():

我想知道为什么默认文本没有出现在输入字段上。在同一屏幕上,一切正常。问题是当我从另一个文件调用函数时。我有一个调用函数的菜单,所有内容看起来都很好,但不是默认文本。主菜单文件包含文件夹中的导入文件。这是我的代码:

__author__ = 'jordiponsisala'
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import*



def mnuArticles():

    def provaD():
        print('Imprimiendo algo')
        print(entDescripcio.get())

    root = Tk()
    root.resizable(0,0)

    notebook = ttk.Notebook(root)
    notebook.pack(fill=BOTH, expand=True,)
    notebook.pressed_index = None
    notebook.master.title("Manteniment d'Articles")
    notebook.master.geometry('900x650+0+100')


    container1 = Frame(notebook,bg='grey')
    container2 = Frame(notebook)


    notebook.add(container1, text='Article')

    botoImprimir = tk.Button
    botoImprimir(container1,text='Provando',highlightbackground='grey'
                 ,command=provaD).place(x=650,y=450)

    tk.Label(container1,text='Codig',bg='grey').place(x=45,y=5)
    tk.Label(container1,text='Descripció',bg='grey').place(x=200,y=5)


    entArticle = StringVar()
    entDescripcio = StringVar()
    entDescripcio.set('the default text that does not appear')


    txtArticle = Entry(container1,textvariable=entArticle
                       ,width=10,highlightthickness='0').place(x=100,y=0)

    txtDescripcio = Entry(container1,textvariable= entDescripcio
                          ,width=50,highlightthickness='0').place(x=280,y=0)


    notebook.add(container2, text='Preu')


    root.mainloop()
这是主文件的代码。 要测试代码,您需要创建一个名为mantenion的文件夹 并将其放入一个空文件u_init__u; py.py中,在开头和结尾加下划线

from tkinter import *
from manteniment.articles import *

ventana = Tk()
ventana.geometry ('500x500+0+0')
ventana.title ('Benvinguts')
lblVentana = Label(text='Grub article').pack()

barraMenu = Menu (ventana)

mnuArchivo = Menu (barraMenu)
mnuTpv = Menu (barraMenu)
mnuLListats = (barraMenu)

mnuArchivo.add_command (label='Articles',command=mnuArticles) #I call the function here

barraMenu.add_cascade(label = 'Mantenimiento',menu =mnuArchivo)
barraMenu.add_cascade(label = 'TPV', menu = mnuTpv)

ventana.config(menu = barraMenu)

ventana.mainloop()

问题是您正在创建多个Tk实例。tkinter程序应该只有一个Tk实例。如果要创建多个窗口,则其他窗口需要是Toplevel的实例

在mnuArticles中,创建Toplevel而不是Tk的实例:


您还需要删除mnuArticles函数中对root.mainloop的调用,因为您的主程序已经有一个mainloop在运行。

这是最好的解决方案,我学到了一个很好的教训。我喜欢python和tkinter lol。
def mnuArticles():
    ...
    root = Toplevel()
    ...