簡體   English   中英

在Tkinter中滾動瀏覽多個標簽

[英]Scrolling through multiple labels in Tkinter

我正在嘗試使用Tkinter創建一個簡單的應用程序啟動器(用於我使用pygame制作的游戲)。 相同的代碼如下所示,它以全屏模式運行(沒有任何最大化或最小化按鈕)。

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

這段代碼沒有問題,但是我想要右側的滾動條或使用箭頭鍵向下滾動/向下移動的方式,這樣,如果我添加更多數量的標簽,它們也將變為可見。

我試圖從互聯網上理解一些代碼片段,也閱讀了Tkinter文檔,但一無所知。 還嘗試遵循另外的stackoverflow討論,並了解有關frame和canvas方法的知識。

框架的Python Tkinter滾動條

框架,畫布和所有東西都變得有點復雜。 我只是想保持簡單,是否可以在上面的代碼片段中添加一些內容以使滾動功能正常工作並且所有標簽都可見?

在此處輸入圖片說明

像上面的東西,但帶有滾動條!

這是有關如何向tkinter應用程序添加滾動條,隱藏滾動條以及使用向上/向下箭頭或鼠標滾輪滾動的MCVE

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

這是對我的問題的更好回答。是的,我知道我無法使滾動條正常工作,但是是的,正如我現在通過這段代碼詢問的那樣,可以通過箭頭鍵向下/滾動,而實際上並沒有滾動條。 這是我用來為pygame制作的游戲制作菜單的方式,也是我在此處應用的相同技術。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM