пустой ткинтер вдова при выполнении - PullRequest
0 голосов
/ 12 октября 2018

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

from Tkinter import *
class window:
    Window=None
    def __init__(self):
        self.Window = Tk()
        self.Window.geometry("300x200")
    def show(self):
        self.Window.mainloop()

class frame:
    frame = None
    row = 0
    column = 0
    variable = {}

    def __init__(self,window=None):
        self.frame = Frame(window.Window)
        self.frame.grid(row=0,column=0)
        self.frame.grid_propagate(0)

    def moverow(self,no):
        self.row = self.row + no
        self.column = 0

    def movecolumn(self,no):
        self.column = self.column + no

    def checkbox(self, var, label):
        variable = IntVar()
        Checkbutton(self.frame,text=label,variable=variable).grid(row=self.row,column=self.column)
        self.variable[var] = variable

    def display(self, llabel, rlabel):
        Label(self.frame,text=llabel).grid(row=self.row,column=self.column)
        Label(self.frame,text=rlabel).grid(row=self.row,column=self.column+1)

    def nextbutton(self,label,anotherframe):
        button = Button(self.frame,text=label,command= lambda: anotherframe.show())
        button.grid(row=self.row,column=self.column)

    def button(self,label,function):
        button = Button(self.frame,text=label,command= lambda: function())
        button.grid(row=self.row,column=self.column)

    def show(self):
        self.frame.tkraise()


window1 = window()
frame1 = frame(window1)
frame1.display("name:","baarath")
frame2 = frame(window1)
frame2.display("frame:","2")
frame2.moverow(1)
frame2.nextbutton("next",frame1)
frame2.moverow(1)
frame2.checkbox("male","male")
frame2.show()
window1.show()

1 Ответ

0 голосов
/ 12 октября 2018

Как пояснил jasonharper, следующий код должен работать:

from Tkinter import *
class window:
    Window=None
    def __init__(self):
        self.Window = Tk()
        self.Window.geometry("300x200")
    def show(self):
        self.Window.mainloop()

class frame:
    frame = None
    row = 0
    column = 0
    variable = {}

    def __init__(self,window=None):
        self.frame = Frame(window.Window)
        self.frame.grid(row=0,column=0)

    def moverow(self,no):
        self.row = self.row + no
        self.column = 0

    def movecolumn(self,no):
        self.column = self.column + no

    def checkbox(self, var, label):
        variable = IntVar()
        Checkbutton(self.frame,text=label,variable=variable).grid(row=self.row,column=self.column)
        self.variable[var] = variable

    def display(self, llabel, rlabel):
        Label(self.frame,text=llabel).grid(row=self.row,column=self.column)
        Label(self.frame,text=rlabel).grid(row=self.row,column=self.column+1)

    def nextbutton(self,label,anotherframe):
        button = Button(self.frame,text=label,command= lambda: anotherframe.show())
        button.grid(row=self.row,column=self.column)

    def button(self,label,function):
        button = Button(self.frame,text=label,command= lambda: function())
        button.grid(row=self.row,column=self.column)

    def show(self):
        self.frame.tkraise()


window1 = window()
frame1 = frame(window1)
frame1.display("name:","baarath")
frame2 = frame(window1)
frame2.display("frame:","2")
frame2.moverow(1)
frame2.nextbutton("next",frame1)
frame2.moverow(1)
frame2.checkbox("male","male")
frame2.show()
window1.show()

Этот код удаляет строку self.frame.grid_propogate(0).Причина того, что эта строка привела к сбою программы, заключается в том, что она препятствует естественной способности фрейма изменять размер, чтобы соответствовать ее содержимому, то есть при том, что он остается в том размере, в котором он был (в данном случае 0x0) после вызова этой строки.Для получения дополнительной информации см эта страница .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...