2017-12-19 20 views
0

목록 상자가 루트 인 경우이 기능이 제대로 작동하지만 상위 창으로 이동할 때 스크롤 막대가 더 이상 나타나지 않습니다. 여기 목록 상자 클래스를 ROOT - Tkinter에서 Toplevel로 이동할 때 yScroll을 느슨하게합니다.

내가 같은 모양 I 유지의 희망으로 다중 열 레이아웃으로 이동하는 데 필요한 전에 특정 코드가 내 원래 원래 구문을 포함

class App: 

def __init__(self): 

    self.listb=Toplevel() 
    self.listb.transient(root) 
    self.listb.title=('DB View') 
    self.vsb = Scrollbar(orient="vertical", command=self.OnVsb) 
    self.listNum = Listbox(self.listb, yscrollcommand=self.vsb.set) 
    self.listRoster = Listbox(self.listb, yscrollcommand=self.vsb.set) 
    self.vsb.pack(side="right",fill="y") 
    self.listNum.pack(side="left",fill="x", expand=True) 
    self.listRoster.pack(side="left",fill="x", expand=True) 
    self.listNum.bind("<MouseWheel>", self.OnMouseWheel) 
    self.listRoster.bind("<MouseWheel>", self.OnMouseWheel) 
    dbi = mdb.connect("localhost", port=3306, user="user", passwd="access", db="interactive_db") 
    cursor = dbi.cursor() 
    cursor.execute("""SELECT num FROM active_roster""") 
    rows = cursor.fetchall() 
    cursor.execute("""SELECT firstname, surname, assign FROM active_roster""") 
    staff =cursor.fetchall() 
    cursor.execute("""SELECT assign FROM active_assign""") 
    aassign = cursor.fetchall() 
    dbi.close() 
    print(rows) 
    print(aassign) 
    print (staff) 

    for results in rows: 
     self.listNum.insert("end", results) 
    for results2 in staff: 
      self.listRoster.insert("end", results2) 
    self.listb.mainloop() 

def OnVsb(self, *args): 
    self.listNum.yview(*args) 
    self.listRoster.yview(*args) 

def OnMouseWheel(self, event): 
    self.listNum.yview("scroll", event.delta,"units") 
    self.listRoster.yview("scroll",event.delta,"units") 

    return "break" 



root = Tk() 
root.title("Main") 

root.geometry("900x600") 


app=App() 
listb = MultipleScrollingListbox() 

#PRE-DUAL COLUMN SYNTAX PRE-CLASS DEF 

numLabel=Label(root, text="Num #") 
numLabel.grid(row=0,column=0) 

assLabel=Label(root, text="Assignment") 
assLabel.grid(row=0,column=2) 


num_input=StringVar() 
num_input=Entry(root,textvariable=num_input) 
num_input.grid(row=0,column=1) 

ass_input=StringVar() 
ass_input=Entry(root,textvariable=ass_input) 
ass_input.grid(row=0,column=3) 


rosterList=Listbox(root, height=6,width=65) 
rosterList.grid(row=2, column=0, rowspan=9, columnspan=4) 
rosterList.bind('<<ListboxSelect>>', on_selection) 

commScroll=Scrollbar(root) 
commScroll.grid(row=2, column=4, rowspan=9) 

rosterList.configure(yscrollcommand=commScroll.set) 
commScroll.configure(command=rosterList.yview) 


root.mainloop() 

합니다 (aassign 쿼리가 적용되지 않은 주)입니다 클래스 정의로 이전하기 시작했습니다. 새로운 것들이 생기기 시작했습니다. ...

저는 Tkinter를 처음 접했고 OnVsb 정의가 어수선 해 보이므로 여기에 어떤 방향이 필요합니다. 그것은 이전에 작업 한 이유 첫 번째 루트에

self.vsb = Scrollbar(self.listb, orient="vertical", command=self.OnVsb) 

그렇지 않으면 기본값 :

LISTBOX IMAGE

+0

[Minimal, Complete and Verifiable example (https://stackoverflow.com/help/mcve)을 작성하십시오. 코드를 그대로 실행할 수는 없으며 디버깅을 복잡하게하는 불필요한 부분이 포함되어 있습니다. 오류를 재현 할 수 없습니다. – Nae

+0

들여 쓰기가 여러분이 가지고있는 것과 정확히 동일하다면, 여러분은 모든'def's와 그 안에 들어있는 것들을 한 번 들여 쓸 필요가 있습니다. – Nae

+0

prob가 표시를 업데이트하지 않습니다 – Raymond

답변

2

당신은 스크롤 통화의 마스터 위젯을 포함해야합니다.

+0

당신이 그것을 풀 었는지 놀랍지는 않습니다 - 당신의 스크립트 샘플은 내가 따라갔습니다 - THX. 나는 그것을 메인 윈도우에서 일시적인 윈도우로 여는 것이다. – Raymond