Не могу понять часть вложенного цикла и как она работает в этом коде - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь выяснить этот код, который я нашел в Интернете.Я не понимаю, как вложенный цикл на самом деле дает результаты в этой конкретной программе tkinter (четыре случая).Я использовал операторы печати в ключевых частях, чтобы понять это, но чем больше я ныряю, тем больше путаюсь.

Может кто-нибудь объяснить, как работает код?

from tkinter import *

class App:
    def __init__(self, root, use_geometry, show_buttons):
        fm = Frame(root, width=300, height=200, bg="blue")
        fm.pack(side=TOP, expand=NO, fill=NONE)

        if use_geometry:
            root.geometry("600x400") ### (1) Note geometry Window Manager method


        if show_buttons:
            Button(fm, text="Button 1", width=10).pack(side=LEFT)
            Button(fm, text="Button 2", width=10).pack(side=LEFT)
            Button(fm, text="Button 3", width=10).pack(side=LEFT)

case = 0
for use_geometry in (0, 1):
    for show_buttons in (0,1):
        case = case + 1
        root = Tk()
        root.wm_title("Case " + str(case)) ### (2) Note wm_title Window Manager method
        display = App(root, use_geometry, show_buttons)
        root.mainloop()

1 Ответ

1 голос
/ 09 июня 2019

Если я правильно прочитал ваш вопрос, вы задаетесь вопросом, как вы можете закончить наши итерации с помощью следующего оператора цикла.

for use_geometry in (0, 1):
    for show_buttons in (0,1):

Причина в том, что для use_geometry = 0 и use_geometry = 1 мы запустим внутренний цикл, что приведет к следующим четырем случаям:

# First outer iteration, first inner
{ use_geometry = 0, show_buttons = 0 }

# First outer iteration, second inner
{ use_geometry = 0, show_buttons = 1 }

# Second outer iteration, first inner
{ use_geometry = 1, show_buttons = 0 }

# Second outer iteration, second inner
{ use_geometry = 1, show_buttons = 1 }

# Done

Всего четыре комбинации. Для каждой из этих четырех комбинаций вы создаете новый экземпляр Tk() и App(), то есть всего четыре экземпляра.

...