Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python tkinter中的滚动条和搜索栏_Python_Tkinter_Canvas - Fatal编程技术网

Python tkinter中的滚动条和搜索栏

Python tkinter中的滚动条和搜索栏,python,tkinter,canvas,Python,Tkinter,Canvas,我看到了滚动条,但它对框架没有影响,按钮不动 你知道如何只显示文本中包含搜索栏中文字的按钮吗 提前谢谢 问题是您将按钮放在游戏窗口中,滚动条放在frame1中确保按钮和滚动条位于同一位置。如果您希望frame1上还有其他内容,请更改它。在它们相同之后,您的代码将如下所示: listacsv = os.path.abspath("spiders//") game = tk.Tk() game.geometry("1000x650") game.title(

我看到了滚动条,但它对框架没有影响,按钮不动

你知道如何只显示文本中包含搜索栏中文字的按钮吗


提前谢谢

问题是您将按钮放在游戏窗口中,滚动条放在frame1中确保按钮和滚动条位于同一位置。如果您希望frame1上还有其他内容,请更改它。在它们相同之后,您的代码将如下所示:

listacsv = os.path.abspath("spiders//")

game = tk.Tk()
game.geometry("1000x650")
game.title('test')
game.resizable(0,0)

entry = tk.Entry(game)
entry.pack(side="left", ipady=5, ipadx=65, anchor='nw', padx=10, pady=10)

frame1 = tk.Frame(game)
frame1.pack(side='right', padx=5)
canvas = tk.Canvas(frame1,width=500,height=700,scrollregion=(100,120,5000,5000))
vbar=tk.Scrollbar(frame1,orient='vertical')
vbar.pack(side='right',fill='y')
vbar.config(command=canvas.yview)
canvas.config(width=500,height=700)
canvas.config(yscrollcommand=vbar.set)
canvas.pack(side='right',expand=True,fill='both')

tk.Button(game, text='Options',activebackground='#87a0c7',relief='solid', command='', height = 2, width = 10).place(x=5, y=600) 

with open(listacsv + '/list.csv', newline='', encoding="utf8") as f:
    reader = csv.reader(f)
    next(f)
    data = list(reader)

c = 4
r = math.ceil(len(data)/c)
for i, item in enumerate(data):
    onclick = lambda url=item[0]: webbrowser.open(url)
    tk.Button(canvas, text=item[1], command=onclick, activebackground='#87a0c7',relief='sunken', height = 3, width = 19, padx=10).grid(column=i//r, row=i%r)      


verlabel=tk.Label(game, text='Version: '+ currentver, relief='flat')
verlabel.place(x=125, y=619)
game.mainloop() 

好的,考虑到答案,我设法做到了这一点,我发布了代码,以防有人遇到同样的问题

listacsv = os.path.abspath("spiders//")

game = tk.Tk()
game.geometry("1000x650")
game.title('test')
game.resizable(0,0)

entry = tk.Entry(game)
entry.pack(side="left", ipady=5, ipadx=65, anchor='nw', padx=10, pady=10)

frame1 = tk.Frame(game)
frame1.pack(side='right', padx=5)
canvas = tk.Canvas(frame1,width=500,height=700,scrollregion=(100,120,5000,5000))
vbar=tk.Scrollbar(frame1,orient='vertical')
vbar.pack(side='right',fill='y')
vbar.config(command=canvas.yview)
canvas.config(width=500,height=700)
canvas.config(yscrollcommand=vbar.set)
canvas.pack(side='right',expand=True,fill='both')

tk.Button(frame1, text='Options',activebackground='#87a0c7',relief='solid', command='', height = 2, width = 10).place(x=5, y=600) 

with open(listacsv + '/list.csv', newline='', encoding="utf8") as f:
    reader = csv.reader(f)
    next(f)
    data = list(reader)

c = 4
r = math.ceil(len(data)/c)
for i, item in enumerate(data):
    onclick = lambda url=item[0]: webbrowser.open(url)
    tk.Button(canvas, text=item[1], command=onclick, activebackground='#87a0c7',relief='sunken', height = 3, width = 19, padx=10).grid(column=i//r, row=i%r)      


verlabel=tk.Label(frame1, text='Version: '+ currentver, relief='flat')
verlabel.place(x=125, y=619)
game.mainloop()
frame1=tk.Frame(游戏)
框架1.pack(side='right',padx=0)
canvas=tk.canvas(框架1,宽度=660,高度=700)
canvas.pack(side='right',expand=True)
my_scrollbar=ttk.scrollbar(frame1,orient='vertical',command=canvas.yview)
我的滚动条。包装(侧边为“右”,填充为“y”)
my_scrollbar.place(x=645,relheight='1')
configure(yscrollcommand=my_scrollbar.set)
canvas.bind(“,lambda e:canvas.configure(scrollregion=canvas.bbox(“全部”))
第二帧=传统帧(画布)
canvas.create_window((0,0),window=second_frame,anchor='ne')
然后为小部件使用第二个_帧。
谢谢大家!

您需要创建另一个框架,并使用
canvas.create_window(…)
将其放入
canvas
。然后将所有按钮改为此框架的子项。标签和按钮选项必须位于框架之外,我要滚动的按钮是tk.button(canvas,text=item[1],command=onclick,activebackground='#87a0c7',relief=sunken',height=3,width=19,padx=10)。grid(column=i//r,row=i%r)然后将滚动条也放在游戏屏幕上。不要把滚动条放在一个框架里。但是我把所有的按钮都放在一个框架里。为什么我要把滚动条放在游戏里?如果你想让滚动条工作,我会这么做。。。
frame1 = tk.Frame(game)
frame1.pack(side='right', padx=0)
canvas = tk.Canvas(frame1,width=660,height=700)
canvas.pack(side='right',expand=True)
my_scrollbar = ttk.Scrollbar(frame1, orient='vertical', command=canvas.yview)
my_scrollbar.pack(side='right', fill='y') 
my_scrollbar.place(x=645,relheight='1')

canvas.configure(yscrollcommand=my_scrollbar.set)
canvas.bind("<Configure>", lambda e: canvas.configure(scrollregion = canvas.bbox("all")))
second_frame = tk.Frame(canvas)

canvas.create_window((0,0), window=second_frame, anchor='ne')