在 Tkinter 中滚动多个标签
Scrolling through multiple labels in Tkinter
我正在尝试使用 Tkinter 制作一个简单的应用程序启动器(对于我使用 pygame 制作的游戏)。同样的代码是 below.It 在全屏模式下运行(没有任何最大化或最小化按钮)。
import Tkinter as tk
from Tkinter import *
import random
import os
import subprocess
def call(event,x):
print "begin"
if x==0:
p = subprocess.Popen("python C:\Users\Akshay\Desktop\i.py")
p.wait()
print "end"
root = tk.Tk()
root.geometry("1368x768+30+30")
root.overrideredirect(True)
root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))
games = ['Game1','Game2','Game3','Game4','Game5','Game6','Game7','Game8']
labels = range(8)
for i in range(8):
ct = [random.randrange(256) for x in range(3)]
brightness = int(round(0.299*ct[0] + 0.587*ct[1] + 0.114*ct[2]))
ct_hex = "%02x%02x%02x" % tuple(ct)
bg_colour = '#' + "".join(ct_hex)
l = tk.Label(root,
text=games[i],
fg='White' if brightness < 120 else 'Black',
bg=bg_colour)
l.place(x = 320, y = 30 + i*150, width=700, height=100)
l.bind('<Button-1>', lambda event, arg=i: call(event, arg))
root.mainloop()
这段代码没有问题,但我想要右侧的滚动条或使用箭头键 scroll/move 向下的方法,这样如果我添加更多标签,它们也会变得可见。
我试图从互联网上理解一些代码片段,也阅读了 Tkinter 文档,但什么都不懂。还尝试关注另一个 Whosebug 讨论并了解框架和 canvas 方法。
Python Tkinter scrollbar for frame
Frame , canvas 一切都变得有点复杂。我只想保留它 simple.Can 可以在上面的代码片段中添加一些东西来使滚动功能正常工作并且所有标签都可见吗?
类似于上面的内容,但带有滚动条!!
这里 MCVE 介绍了如何向 tkinter
应用程序添加滚动条、隐藏滚动条以及使用 up/down 箭头或鼠标滚轮滚动。
from tkinter import *
parent=Tk() # parent object
canvas = Canvas(parent, height=200) # a canvas in the parent object
frame = Frame(canvas) # a frame in the canvas
# a scrollbar in the parent
scrollbar = Scrollbar(parent, orient="vertical", command=canvas.yview)
# connect the canvas to the scrollbar
canvas.configure(yscrollcommand=scrollbar.set)
scrollbar.pack(side="right", fill="y") # comment out this line to hide the scrollbar
canvas.pack(side="left", fill="both", expand=True) # pack the canvas
# make the frame a window in the canvas
canvas.create_window((4,4), window=frame, anchor="nw", tags="frame")
# bind the frame to the scrollbar
frame.bind("<Configure>", lambda x: canvas.configure(scrollregion=canvas.bbox("all")))
parent.bind("<Down>", lambda x: canvas.yview_scroll(3, 'units')) # bind "Down" to scroll down
parent.bind("<Up>", lambda x: canvas.yview_scroll(-3, 'units')) # bind "Up" to scroll up
# bind the mousewheel to scroll up/down
parent.bind("<MouseWheel>", lambda x: canvas.yview_scroll(int(-1*(x.delta/40)), "units"))
labels = [Label(frame, text=str(i)) for i in range(20)] # make some Labels
for l in labels: l.pack() # pack them
parent.mainloop() # run program
这是对我的 question.Yes 的更好回答,我知道我无法使滚动条正常工作,但是是的,正如我现在通过这段代码询问的那样,可以通过箭头键移动 down/scroll 而无需滚动条实际上在那里。这是我为我的 pygame 制作的游戏制作菜单的方式,我应用的相同技术 here.It 有效,但仅在全屏模式下。
import Tkinter as tk
from Tkinter import *
import random
import os
import subprocess
class stat:
j=0
def call(event,x):
print "begin"
if x==0:
p = subprocess.Popen("python C:\Users\Akshay\Desktop\i.py")
p.wait()
print "end"
def OnEntryDown(event):
stat.j=stat.j+1
print stat.j
xmain()
def OnEntryUp(event):
stat.j=stat.j-1
print stat.j
xmain()
def xmain():
root = tk.Tk()
root.geometry("1368x768+30+30")
root.overrideredirect(True)
root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))
root.bind("<Down>", OnEntryDown)
root.bind("<Up>", OnEntryUp)
languages = ['Game1','Game2','Game3','Game4','Game5','Game6','Game7','Game8']
labels = range(8)
k=0
print stat.j
for i in range(stat.j,stat.j+5):
ct = [random.randrange(256) for x in range(3)]
brightness = int(round(0.299*ct[0] + 0.587*ct[1] + 0.114*ct[2]))
ct_hex = "%02x%02x%02x" % tuple(ct)
bg_colour = '#' + "".join(ct_hex)
l = tk.Label(root,
text=languages[i],
fg='White' if brightness < 120 else 'Black',
bg=bg_colour)
l.place(x = 320, y = 30 + k*150, width=700, height=100)
l.bind('<Button-1>', lambda event, arg=stat.j: call(event, arg))
k=k+1
root.mainloop()
xmain()
我正在尝试使用 Tkinter 制作一个简单的应用程序启动器(对于我使用 pygame 制作的游戏)。同样的代码是 below.It 在全屏模式下运行(没有任何最大化或最小化按钮)。
import Tkinter as tk
from Tkinter import *
import random
import os
import subprocess
def call(event,x):
print "begin"
if x==0:
p = subprocess.Popen("python C:\Users\Akshay\Desktop\i.py")
p.wait()
print "end"
root = tk.Tk()
root.geometry("1368x768+30+30")
root.overrideredirect(True)
root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))
games = ['Game1','Game2','Game3','Game4','Game5','Game6','Game7','Game8']
labels = range(8)
for i in range(8):
ct = [random.randrange(256) for x in range(3)]
brightness = int(round(0.299*ct[0] + 0.587*ct[1] + 0.114*ct[2]))
ct_hex = "%02x%02x%02x" % tuple(ct)
bg_colour = '#' + "".join(ct_hex)
l = tk.Label(root,
text=games[i],
fg='White' if brightness < 120 else 'Black',
bg=bg_colour)
l.place(x = 320, y = 30 + i*150, width=700, height=100)
l.bind('<Button-1>', lambda event, arg=i: call(event, arg))
root.mainloop()
这段代码没有问题,但我想要右侧的滚动条或使用箭头键 scroll/move 向下的方法,这样如果我添加更多标签,它们也会变得可见。
我试图从互联网上理解一些代码片段,也阅读了 Tkinter 文档,但什么都不懂。还尝试关注另一个 Whosebug 讨论并了解框架和 canvas 方法。
Python Tkinter scrollbar for frame
Frame , canvas 一切都变得有点复杂。我只想保留它 simple.Can 可以在上面的代码片段中添加一些东西来使滚动功能正常工作并且所有标签都可见吗?
类似于上面的内容,但带有滚动条!!
这里 MCVE 介绍了如何向 tkinter
应用程序添加滚动条、隐藏滚动条以及使用 up/down 箭头或鼠标滚轮滚动。
from tkinter import *
parent=Tk() # parent object
canvas = Canvas(parent, height=200) # a canvas in the parent object
frame = Frame(canvas) # a frame in the canvas
# a scrollbar in the parent
scrollbar = Scrollbar(parent, orient="vertical", command=canvas.yview)
# connect the canvas to the scrollbar
canvas.configure(yscrollcommand=scrollbar.set)
scrollbar.pack(side="right", fill="y") # comment out this line to hide the scrollbar
canvas.pack(side="left", fill="both", expand=True) # pack the canvas
# make the frame a window in the canvas
canvas.create_window((4,4), window=frame, anchor="nw", tags="frame")
# bind the frame to the scrollbar
frame.bind("<Configure>", lambda x: canvas.configure(scrollregion=canvas.bbox("all")))
parent.bind("<Down>", lambda x: canvas.yview_scroll(3, 'units')) # bind "Down" to scroll down
parent.bind("<Up>", lambda x: canvas.yview_scroll(-3, 'units')) # bind "Up" to scroll up
# bind the mousewheel to scroll up/down
parent.bind("<MouseWheel>", lambda x: canvas.yview_scroll(int(-1*(x.delta/40)), "units"))
labels = [Label(frame, text=str(i)) for i in range(20)] # make some Labels
for l in labels: l.pack() # pack them
parent.mainloop() # run program
这是对我的 question.Yes 的更好回答,我知道我无法使滚动条正常工作,但是是的,正如我现在通过这段代码询问的那样,可以通过箭头键移动 down/scroll 而无需滚动条实际上在那里。这是我为我的 pygame 制作的游戏制作菜单的方式,我应用的相同技术 here.It 有效,但仅在全屏模式下。
import Tkinter as tk
from Tkinter import *
import random
import os
import subprocess
class stat:
j=0
def call(event,x):
print "begin"
if x==0:
p = subprocess.Popen("python C:\Users\Akshay\Desktop\i.py")
p.wait()
print "end"
def OnEntryDown(event):
stat.j=stat.j+1
print stat.j
xmain()
def OnEntryUp(event):
stat.j=stat.j-1
print stat.j
xmain()
def xmain():
root = tk.Tk()
root.geometry("1368x768+30+30")
root.overrideredirect(True)
root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))
root.bind("<Down>", OnEntryDown)
root.bind("<Up>", OnEntryUp)
languages = ['Game1','Game2','Game3','Game4','Game5','Game6','Game7','Game8']
labels = range(8)
k=0
print stat.j
for i in range(stat.j,stat.j+5):
ct = [random.randrange(256) for x in range(3)]
brightness = int(round(0.299*ct[0] + 0.587*ct[1] + 0.114*ct[2]))
ct_hex = "%02x%02x%02x" % tuple(ct)
bg_colour = '#' + "".join(ct_hex)
l = tk.Label(root,
text=languages[i],
fg='White' if brightness < 120 else 'Black',
bg=bg_colour)
l.place(x = 320, y = 30 + k*150, width=700, height=100)
l.bind('<Button-1>', lambda event, arg=stat.j: call(event, arg))
k=k+1
root.mainloop()
xmain()