Почему текстовая запись по умолчанию Python Tk не работает, когда это функция?

Я хотел бы знать, почему текст по умолчанию не отображается в поле ввода. На том же экране все работает нормально. Проблема в том, что я вызываю функцию из другого файла. У меня есть это меню, которое вызывает функцию, и все выглядит нормально, но не текст по умолчанию. Файл главного меню с файлами импорта в папках. Это мой код:

__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()

Это код основного файла. Для тестирования кода нужно создать папку с названием manteniment и поместить внутрь пустой файл __init__.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()

person Jordi Ponsí Sala    schedule 26.09.2014    source источник


Ответы (1)


Проблема в том, что вы создаете более одного экземпляра Tk. Программа tkinter должна иметь только один экземпляр Tk. Если вы хотите создать несколько окон, дополнительные окна должны быть экземплярами Toplevel.

В mnuArticles создайте экземпляр Toplevel, а не Tk:

def mnuArticles():
    ...
    root = Toplevel()
    ...

Вам также необходимо удалить вызов root.mainloop() в функции mnuArticles, поскольку в вашей основной программе уже запущен основной цикл.

person Bryan Oakley    schedule 26.09.2014
comment
Это лучшее решение, я усвоил хороший урок. Мне нравится python и tkinter, лол. - person Jordi Ponsí Sala; 27.09.2014