Форум сайта python.su
нашел в нете рабочий пример , вот он :
#!/usr/bin/python #-*- coding: utf-8 -*- from Tkinter import * def data(): for i in range(50): Label(frame,text=i).grid(row=i,column=0) Label(frame,text="my text"+str(i)).grid(row=i,column=1) Label(frame,text="..........").grid(row=i,column=2) def myfunction(event): canvas.configure(scrollregion=canvas.bbox("all") ,width=200,height=200) root=Tk() sizex = 800 sizey = 600 posx = 100 posy = 100 root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy)) myframe=Frame(root,relief=GROOVE,width=50,height=100,bd=1) myframe.place(x=10,y=10) canvas=Canvas(myframe) frame=Frame(canvas) myscrollbar=Scrollbar(myframe,orient="vertical",command=canvas.yview) canvas.configure(yscrollcommand=myscrollbar.set) myscrollbar.pack(side="right",fill="y") canvas.pack(side="left") canvas.create_window((0,0),window=frame,anchor='nw') frame.bind("<Configure>",myfunction) data() root.mainloop()
#/usr/bin/python # -*- coding: utf-8 -*- import Tkinter as tk class gui(object): def __init__(self): ## self.root = tk.Tk() self.root.geometry('900x600+0+0') self.root.maxsize(900, 600) self.root.minsize(900, 600) self.mfrm = tk.Frame(self.root , borderwidth = 0) self.mfrm.place(x = 0 , y = 0 , width = 900 , height = 600) self.root.title('злая хрень ver 1.0 beta') ### менюха (урезано что-б глаза не мозолил лишний код) self.addnew = tk.Button(self.mfrm , text = 'создать' , command = self.creator ) self.addnew.place(x = 5 , y = 5 , width = 100 , height = 20) self.__hr = tk.Label(self.mfrm , background = '#000000' , borderwidth = 0) self.__hr.place(x = 0 , y = 65 , width = 900 , height = 3) ### попытка запилить окно со скроллбаром self.canvas = tk.Canvas(self.mfrm) self.sfrm = tk.Frame(self.canvas) self._scrollb = tk.Scrollbar(self.mfrm , orient = 'vertical' , command = self.canvas.yview) self.canvas.configure(yscrollcommand = self._scrollb.set) self._scrollb.place(x = 880 , y = 70 , width = 20 , height = 530) self.canvas.pack(side="left") #place(x = 0 , y = 70 , width = 880 , height = 530) self.canvas.create_window( (0,0) , window = self.sfrm , anchor = 'nw') self.sfrm.bind("<Configure>" , self._reconf_canvas) def _reconf_canvas(self , event): self.canvas.configure( scrollregion = self.canvas.bbox('all') , width = 880 , height = 530) def creator(self): # эта функция запилена именно так потому-что в боевой версии кода ничто кроме метода place не подходит #поэтому я код упростил выглядит кривовато но так надо ynext = 100 for x in xrange(100): # когда помещаю кнопки в self.sfrm ничего не видно bu = tk.Button(self.sfrm , text = str(x) ) # при этом в self.mfrm все создаеться и видно но естественно скроллбар не работает bu.place(x = 5 , y = ynext , width = 400 , height = 20) ynext += 30 grf = gui() grf.root.mainloop()
Офлайн
Готов помочь, но не пойму что надо. Код запустил. Он работает…
Как то все у Вас сумбурно.
P.S. Методы можно разграничивать рамками.
P.S.S. Очень много ошибок в технике построения GUI - если надо, то напишу…
Офлайн
тот что выложен первым работает вполне успешно , а тот что реализован в виде класса при нажатии на кнопку “создать” не подает никаких признаков жизни , питон 2.7.3 , даже удивительно как он у вас заработал
P.S.S. Очень много ошибок в технике построения GUI - если надо, то напишу…если вы о моем стиле написания то я обычно сначала леплю нагрязную (быдлокод с костылями) а затем вычищаю после того как софтина готова , у меня так быстрее получаеться писать , тем не менее если вы тыкнете меня мордой в ман описывающий мои ошибки буду рад
Офлайн
По поводу Вашего вопроса
Замените:
self.sfrm = tk.Frame(self.canvas)
self.sfrm = tk.Frame(self.canvas, width=880, height=530)
self.canvas.config(scrollregion=(0, 0, 1200, 1200))
Отредактировано 4kpt_II (Дек. 28, 2013 02:52:55)
Офлайн