使用“ canvas.create_window”动态调整窗口大小[已解决]

问题描述 投票:-1回答:1

在回答之前的问题之后,我一直在开发一个测验应用程序,在该应用程序中,我一直不是Tkinter的高级用户,而经常遇到问题和障碍,大部分是Tkinter命令。

总之,我最近遇到的一个问题是我无法动态设置窗口的大小。但是,我不知道该怎么做。我已经阅读了以下文章:

A,当我使用以下命令时,他们都无法帮助我:self.canvas.create_window((10,10),window=self.frame, anchor="nw")我已经尝试删除(width, height)参数,否则编译器将抛出错误。

这是我创建GUI的代码:

def run(self):
        self.root1 = tk.Tk()
        self.root1.protocol("WM_DELETE_WINDOW", self.cont)
        self.root1.resizable(True, True)
        self.root1.title(TITLE)
        self.canvas = tk.Canvas(self.root1, borderwidth=0)
        self.frame = tk.Frame(self.canvas)
        self.vsb = tk.Scrollbar(self.root1, orient="vertical", command=self.canvas.yview)
        self.xsb = tk.Scrollbar(self.root1, orient="horizontal",command=self.canvas.xview)
        self.canvas.configure(yscrollcommand=self.vsb.set,xscrollcommand=self.xsb.set)
        self.vsb.pack(side="right", fill="y")
        self.xsb.pack(side="bottom",fill="x")
        self.canvas.pack(fill="both", expand=True)
        self.canvas.create_window((10,10),window=self.frame, anchor="nw")
        self.frame.bind("<Configure>", lambda event, canvas=self.canvas: self.onFrameConfigure(self.canvas))
        QAS_SEQUENCED = qasSequenced
        ANSWERS = list(QAS_SEQUENCED.values())
        QUESTIONS = list(QAS_SEQUENCED.keys())

        print('SETUP Frame')

        print(QUESTIONS)
        print(ANSWERS)

        global ANSWER_FIELDS
        ANSWER_FIELDS = []
        ANSWER_FIELDS.clear()

        self.REPLIES_AA = []
        print('Set self.REPLIES_AA')

        qColumnIndex = 1 #Current Column (Qs relative)
        qColumnIndex_ALIGN = 1
        numColumns = int(len(QUESTIONS)/10) #Num columns (Qs total)
        ROW = 0

        QUESTION = ""

        for i in range(0, len(QUESTIONS)):
            QUESTION_TMP = QUESTIONS[i]
            QUESTION = ""
            QUESTION_NEWLINE_INDEX = int(len(QUESTION_TMP)/40)
            QUESTION_NEWLINE_INDEX_USE = 1

            for ii in range(0, len(QUESTION_TMP)):
                QUESTION_TMP = str(QUESTION_TMP)
                if (ii+1) >= 40*QUESTION_NEWLINE_INDEX_USE or QUESTION_TMP[ii] == "`":
                    QUESTION += ("\n")
                    if not QUESTION_TMP[ii] == "`":
                        QUESTION += str(QUESTION_TMP[ii])
                    QUESTION_NEWLINE_INDEX_USE += 1
                else:
                    QUESTION += str(QUESTION_TMP[ii])

            QUESTION = str(QUESTION)
            ANSWERS[i] = str(ANSWERS[i])

            print('Setting up question ' + str(i+1))
            print('Question: ' + QUESTION + ' Answer: ' + ANSWERS[i] + "\n")

            if ROW > 10:
                qColumnIndex += 1
                qColumnIndex_ALIGN += 2
                ROW = 0

            QUESTION_TMP = tk.Label(self.frame)
            QUESTION_TMP.config(text=QUESTION)
            QUESTION_TMP.grid(row=ROW,column=(qColumnIndex_ALIGN-1))

            ANSWER_TEMP_ASF = tk.Entry(self.frame)
            ANSWER_TEMP_ASF.grid(row=ROW,column=(qColumnIndex_ALIGN))
            ANSWER_FIELDS.append(ANSWER_TEMP_ASF)
            ROW += 1
        if len(QUESTIONS) <= 10:
            self.submitButton = tk.Button(self.frame,text='SUBMIT ANSWERS',command=self.submitClick)
            self.submitButton.grid(row=(len(QUESTIONS)+1),column=1)
        else:
            self.submitButton = tk.Button(self.frame, text='SUBMIT ANSWERS', command=self.submitClick)
            self.submitButton.grid(row=(len(QUESTIONS)+1),column=1)
        self.root1.mainloop()
python tkinter python-3.8
1个回答
0
投票

我将self.canvas.create_window((10,10),window=self.frame, anchor="nw")更改为self.canvas.create_window((0,0),window=self.frame, anchor="nw",width=self.canvas.winfo_width(), height=self.canvas.winfo_height()),并使self.canvas成为所有小部件的父级。因此,我能够解决我的问题。

感谢您提供的所有帮助(@ acw1668和@BrianOakley)

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.