Создание рамки внутри холста - PullRequest
1 голос
/ 23 мая 2011

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

Я могу создать прокручиваемый холст, который отлично работает, но я не могу правильно добавить рамку внутри него:

    self.title = Label(root, text="Brnr", font=("Helvetica", 50), anchor = W, pady = 40, padx = 50)
    self.title.pack (anchor = NW)
    #creates title widget for title

    self.frame = Frame(screen, bd =1)
    self.frame.pack(fill = BOTH)
    #Creates frame widget under which all other widgets will be kept

    self.canvas = Canvas(self.frame,  bd=1,scrollregion=(0,0, 1000, 1000), height = 600)
    #creates canvas so that screen can be scrollable

    self.scrollbar = Scrollbar(self.frame, command=self.canvas.yview)
    #creates scrollbar

    self.canvas.config(yscrollcommand=self.scrollbar.set)  
    #connects the scrollbar to the canvas

    self.scrollbar.pack(side=RIGHT, fill=Y)                     
    self.canvas.pack(expand=YES, fill=BOTH) 
    #packs the scrollbar and canvas so that they fill the remainder of the screen


    self.frameC = Frame(bg = "red")
    self.canvas.create_window(0,0, anchor = NW, window = self.frameC, width = 200, height = 200)
    #creates window on the scrollable area to add other widgets

    self.frameC.pack()
    self.groupRec = LabelFrame(self.frameC, text ="Recommendations:", font=("Helvetica", 20))
    self.groupRec.pack()
    self.signupButton = Button(self.groupRec, text="Sign Up", width=10)
    self.signupButton.pack(side=RIGHT)
    #creates button to submit login

Это дает мне прокручиваемый, но пустой холст, без появления ни одного ярлыка / кнопки.

Ответы [ 2 ]

6 голосов
/ 24 мая 2011

По умолчанию, когда вы добавляете окно на холст, центр окна будет соответствовать заданным вами координатам. Таким образом, центр вашей рамки будет в 0,0, который является верхним левым углом холста. Вы не можете видеть виджеты, потому что они находятся за пределами холста.

Решение состоит в том, чтобы включить anchor="nw" в вызов create_window, который поместит верхний левый угол вашей рамки в верхний левый угол вашего холста.

Не забудьте установить область прокрутки холста в соответствии с размером вашей рамки. Самый простой способ сделать это с помощью команды self.canvas.config(scrollregion=self.canvas.bbox("all")). Возможно, вам также понадобится добавить привязку к <Configure> на холсте, чтобы вы могли изменить размер внутренней рамки, когда пользователь изменяет размер окна. Это не всегда необходимо, это зависит от того, чего именно вы пытаетесь достичь.

Вот совет профессионала: для устранения подобных проблем действительно полезно временно придать рамке и холсту разные цвета, чтобы легче было визуализировать происходящее.

4 голосов
/ 23 мая 2011

Не переизобретай колесо.Установите Pmw (мета-виджеты Python), предполагая, что вы используете Tkinter, http://pmw.sourceforge.net/ и используете Pmw.ScrolledFrame.

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