1) сделал дочерние окна по кнопке,
2) потом случайную покраску окон
3) и, чтобы на родительское окно не наезжали.
4) и вот захотел я их посчитать.
И не тут-то было.
отчего-то дают 1, 3, 7, 15, 31…
(в 1-м примере ниже я добавил 1-ку, чтобы были чистые степени двойки: 2,4,8,16,32….)
Там тупо глобальная переменная counter.
Не хочет, ну, думаю, глобальные переменные не по феншую,
сделаю в классе - но результат тот же (во 2-м):
(во 2-м оставил 1, 3, 7, 15, 31…)
Не могу понять отчего так? (почему не 1,2,3,4,5,6,7…..) ?
файлы в виде файлов прилагаются.
1-й
# -*- coding: utf-8 -*- # импортирование модулей python from tkinter import * # класс главного окна class main(): def __init__(self, master): self.master = master self.master.title('parent') self.master.geometry('200x150+300+225') self.button = Button(self.master, text = 'myButton', command = self.openDialog, font="Arial 24") self.button.pack(side = BOTTOM) self.master.mainloop() def openDialog(self): child(self.master) # класс дочерних окон counter = 0 class child(): def __init__(self, master): self.slave = Toplevel(master) self.slave.title('child') global counter counter += counter + 1 self.label = Label(self.slave, text = ('Окно N '+str(counter+1)), font="Arial 16") #self.label = Label(self.slave, text = 'Привет, мир') #self.label.pack(padx = 0, pady = 0) self.label.pack(side = TOP) geometry1 = str(random.randrange(0,100)) geometry2 = str(random.randrange(400,700)) geometry11 = str(random.randrange(0,100)) geometry22 = str(random.randrange(400,700)) g1 = random.choice([geometry1,geometry2]) g2 = random.choice([geometry11,geometry22]) # geometry0 = '+'+geometry1+'+'+geometry2 geometry0 = '+'+g1+'+'+g2 geo = '200x150'+geometry0 #self.slave.geometry('200x150+500+375') self.slave.geometry(geo) bgcolor = random.choice(colors) self.slave.configure(bg=bgcolor) #self.slave.configure(bg='green') #root.configure(bg='green') import random colors = ['red','yellow', 'green', 'orange', 'aqua', 'blue', 'fuchsia', 'maroon', 'pink', 'purple', 'lime', 'violet', 'cyan', 'cornflowerblue', 'indigo', 'chartreuse' ] # bgcolor = random.choice(colors) # создание окна root = Tk() # запуск окна main(root)
Ну, думаю, глобальные переменные не по феншую,
сделаю в классе - но результат тот же:
# -*- coding: utf-8 -*- # импортирование модулей python from tkinter import * # класс главного окна class main: count = 0 def __init__(self, master): self.master = master self.master.title('parent') self.master.geometry('200x150+300+225') self.button = Button(self.master, text = 'myButton', command = self.openDialog, font="Arial 20") self.button.pack(side = BOTTOM) self.master.mainloop() def openDialog(self): self.count += self.count + 1 child.counter = self.count print("child.counter = ", child.counter) child(self.master) # класс дочерних окон class child: def __init__(self, master): self.slave = Toplevel(master) self.slave.title('child') #self.counter += self.counter + 1 self.label = Label(self.slave, text = ('Окно N '+str(self.counter)), font="Arial 18") #self.label = Label(self.slave, text = 'Привет, мир') #self.label.pack(padx = 0, pady = 0) self.label.pack(side = TOP) geometry1 = str(random.randrange(0,100)) geometry2 = str(random.randrange(400,700)) geometry11 = str(random.randrange(0,100)) geometry22 = str(random.randrange(400,700)) g1 = random.choice([geometry1,geometry2]) g2 = random.choice([geometry11,geometry22]) # geometry0 = '+'+geometry1+'+'+geometry2 geometry0 = '+'+g1+'+'+g2 geo = '200x150'+geometry0 #self.slave.geometry('200x150+500+375') self.slave.geometry(geo) bgcolor = random.choice(colors) self.slave.configure(bg=bgcolor) #self.slave.configure(bg='green') #root.configure(bg='green') import random colors = ['red','yellow', 'green', 'orange', 'aqua', 'blue', 'fuchsia', 'maroon', 'pink', 'purple', 'lime', 'violet', 'cyan', 'cornflowerblue', 'indigo', 'chartreuse' ] # bgcolor = random.choice(colors) # создание окна root = Tk() # запуск окна main(root) """ child.counter 1 child.counter 3 child.counter 7 child.counter 15 child.counter 31 child.counter 63 child.counter 127 child.counter 255 child.counter 511 child.counter 1023 child.counter 2047 child.counter 4095 """