从ROOT - 在Tkinter中将Listbox类移动到Toplevel时松散yScroll
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从ROOT - 在Tkinter中将Listbox类移动到Toplevel时松散yScroll相关的知识,希望对你有一定的参考价值。
当列表框是root时,这可以正常工作,但是当我将它移动到Toplevel窗口时,滚动条不再出现。
以下是具体代码(注意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()
在我需要移动到多列布局之前,我包含了我原始的原始语法,希望保持相同的外观我开始迁移到类def - 事情开始变得新的错误...
我是Tkinter的新手,需要一些方向,因为OnVsb定义似乎搞乱了。
答案
您需要在Scrollbar调用中包含主窗口小部件:
self.vsb = Scrollbar(self.listb, orient="vertical", command=self.OnVsb)
否则它默认为第一个根,这就是它之前工作的原因。
以上是关于从ROOT - 在Tkinter中将Listbox类移动到Toplevel时松散yScroll的主要内容,如果未能解决你的问题,请参考以下文章
Python3 Tkinter基础 Scrollbar Listbox 在listbox中创建一个垂直滚动条 yscrollcommand yview
Python3 Tkinter基础 Listbox for循环与insert 将一个列表中元素添加到Listbox中