Добавление grid.lines в tkinter не работает - PullRequest
0 голосов
/ 16 декабря 2018

Я написал скрипт, который показывает, сколько дней открываются определенные продукты.Отображается на жк через ткинтер.Однако, когда я добавляю новый элемент, 7-я строка не добавляется.Один элемент перезаписан.Где может быть моя ошибка?

#!/usr/bin/python3
import datetime
from tkinter import *


food = {'potatoes': datetime.date(2018, 12, 8),'sausage': datetime.date(2018, 12, 12), 'cream': datetime.date(2018, 12, 13), 'cauliflower': datetime.date(2018, 12, 11), 'ham': datetime.date(2018, 12, 10)}
food_count = len(food.items())



def add():
    food["tomato"] = datetime.date.today()
    food_count = len(food.items())
    show()


def show():    
    for i in range(0, int(food_count)):
        name, date = list(food.items())[i]
        days_open = (datetime.date.today() - date).days
        label_name = Label(master=window, width=width, height=height,
                                          font=("Arial",10),
                                           text = name)
        label_days= Label(master=window, width=width, height=height,
                                          font=("Arial",10),
                                           text = days_open)
        label_name.grid(row=i+1,column=1)
        label_days.grid(row=i+1,column=2)

width = 20
height = 2

window = Tk()
window.geometry('480x320')

button_add = Button(master=window, width=width, height=height,
                text="Add",
                command=add,
                font=("Arial",10))

label_01 = Label(master=window, width=width, height=height,
              font=("Arial",10),
              text = "Lebensmittel")

label_02 = Label(master=window, width=width, height=height,
              font=("Arial",10),
              text = "geöffnet seit")

button_add.grid(row=0,column=0)
label_01.grid(row=0,column=1)
label_02.grid(row=0,column=2)

show()
window.mainloop()

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Проблема в этом коде - строка:

food_count = len(food.items())

Эта строка создает новую переменную в локальной области, но не изменяет переменную в глобальной области (см. локальная и глобальная область).scope ).

Чтобы исправить это, вам нужно изменить функцию add на:

def add():
    global food_count
    food["tomato"] = datetime.date.today()
    food_count = len(food.items())
    show()

Это позволит убедиться, что food_count находится в глобальной области видимости.

0 голосов
/ 16 декабря 2018

Я думаю, что у меня есть ответ: ваш код:

def add():
    food["tomato"] = datetime.date.today()
    food_count = len(food.items())
    show()


def show():

for i in range(0, int(food_count)):
    name, date = list(food.items())[i]
    days_open = (datetime.date.today() - date).days
    label_name = Label(master=window, width=width, height=height,
                                      font=("Arial",10),
                                       text = name)


    label_days= Label(master=window, width=width, height=height,
                                      font=("Arial",10),
                                       text = days_open)


    label_name.grid(row=i+1,column=1)
    label_days.grid(row=i+1,column=2)

, но в def show () цикл for ничего не делает, потому что в нем не определено food_count, поэтому for lop нетсделать что-нибудь, посмотреть, если это работает

def add():
    food["tomato"] = datetime.date.today()
    #food_cound moved to def show
    show()


def show():
    food_count = len(food.items())
    for i in range(0, int(food_count)):
        name, date = list(food.items())[i]
        days_open = (datetime.date.today() - date).days
        label_name = Label(master=window, width=width, height=height,
                                          font=("Arial",10),
                                           text = name)


        label_days= Label(master=window, width=width, height=height,
                                          font=("Arial",10),
                                           text = days_open)


        label_name.grid(row=i+1,column=1)
        label_days.grid(row=i+1,column=2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...