2017-12-19 21 views
0

これはリストボックスがルートのときにはうまく動作しますが、Toplevelウィンドウに移動するとスクロールバーが表示されなくなります。ここでリストボックスクラスをROOT - TkinterからToplevelに移動するときにyScrollを緩める

は、特定のコード(aassignクエリが適用されていない注意してください)

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() 

私は同じ外観を維持するのを期待して、マルチカラムレイアウトに移動するために必要な前に、私は私の元の元の構文が含まれていますクラス定義への移行を開始しました。

私はTkinterを初めて使い、OnVsbの定義が狂っているように見えるので、ここでは何か指示が必要です。

あなたはスクロールバーの呼び出しでマスターウィジェットを含める必要が

LISTBOX IMAGE

+0

[最小限の、完全で検証可能な例を作成する](https://stackoverflow.com/help/mcve)を試してください。コードをそのまま実行することはできません。たとえあったとしても、デバッグを複雑にする余分な部分が含まれています。このエラーは再現できません。 – Nae

+0

あなたのインデントがあなたがここにあるものとまったく同じであることが確かであれば、すべての 'def'sとその中に入っているものを一度インデントする必要があります。 – Nae

+0

probは表示を更新しません – Raymond

答えて

2

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

それ以外の場合は、それが前に働いていた理由である第一のルート、デフォルト。

+0

あなたがそれを解決しても驚くことではありません。私は一時的なウィンドウとしてメインウィンドウで開きます。 – Raymond

関連する問題