2017-05-29 85 views
0

几周来,我尝试让我的应用程序滚动条。但是与TKinter模块有冲突,我不知道如何解决它。没有我的模块,它是滚动条,但不是与他们。你可以帮我请一下这个例子吗?Python - 滚动条如何处理标签,单选按钮,按钮?

Lovespock

Ps。请好,我是一个半新手。 :/:p PP。我没有textdefinitions代码和所有单选按钮

from __future__ import print_function 
from Tkinter import * 
import Tkinter as tk 
from result import * 

master = tk.Tk() 

frame=Frame(master,width=300,height=300) 
frame.pack 
canvas=Canvas(frame,bg='#FFFFFF',width=300,height=300,scrollregion=(0,0,500,500)) 

vbar=Scrollbar(frame,orient=VERTICAL) 
vbar.pack(side=RIGHT,fill=Y) 
vbar.config(command=canvas.yview) 

def sumlist(): 
    sum = (vallist_a[-1]) + (vallist_b[-1]) + (vallist_c[-1]) + (vallist_d[-1]) + (vallist_e[-1]) + (vallist_f[-1]) + (vallist_g[-1]) + (vallist_h[-1]) + (vallist_i[-1]) 
    print (sum) 

def create_window(): #Definion und Festlegung neues Fenster 
    toplevel = Toplevel() 
    toplevel.title('result') 
    toplevel.geometry('1500x1000') 
    toplevel.focus_set() 
    sum = (vallist_a[-1]) + (vallist_b[-1]) + (vallist_c[-1]) + (vallist_d[-1]) + (vallist_e[-1]) + (vallist_f[-1]) + (vallist_g[-1]) + (vallist_h[-1]) + (vallist_i[-1]) 
    if 9<= sum <= 14: 
     msg = Message(toplevel, text = result1) 
     msg.config(bg='lightgreen', font=('times', 24, 'italic')) 
     msg.pack() 
    if 15<= sum <= 21: 
     msg = Message(toplevel, text = result2) 
     msg.config(bg='lightgreen', font=('times', 24, 'italic')) 
     msg.pack() 
    if 22<= sum <= 28: 
     msg = Message(toplevel, text = result3) 
     msg.config(bg='lightgreen', font=('times', 24, 'italic')) 
     msg.pack() 
    if 29<= sum <= 36: 
     msg = Message(toplevel, text = result4) 
     msg.config(bg='lightgreen', font=('times', 24, 'italic')) 
     msg.pack() 


def ShowChoice(text, v, testlist): 
    print(v.get()) 
    testlist.append(v.get()) 

vallist_a = [] 
vallist_b = [] 
vallist_c = [] 
vallist_d = [] 
vallist_e = [] 
vallist_f = [] 
vallist_g = [] 
vallist_h = [] 
vallist_i = [] 


hello = [ 
    (1), 
    (2), 
    (3), 
    (4), 
] 

officer = [ 
    (1), 
    (2), 
    (3), 
    (4), 
] 

borg = [ 
    (1), 
    (2), 
    (3), 
    (4), 
] 

vulcans = [ 
    (1), 
    (2), 
    (3), 
    (4), 
] 

home = [ 
    (1), 
    (2), 
    (3), 
    (4), 
] 

crew = [ 
    (1), 
    (2), 
    (3), 
    (4), 
] 

important = [ 
    (1), 
    (2), 
    (3), 
    (4), 
] 

take = [ 
    (1), 
    (2), 
    (3), 
    (4), 
] 

bye = [ 
    (1), 
    (2), 
    (3), 
    (4), 
] 

tk.Label(canvas, text='Which Captain are you?', font=("Helvetica", 30), fg = 'red').pack() 

varhello = tk.IntVar() 

for i, val in enumerate(hello): 
    tk.Radiobutton(canvas, text=text[i], variable=varhello, value=val, 
    command=lambda t=text, a=varhello: ShowChoice(t, a, vallist_a)).pack(anchor=tk.N) 


Button(canvas, text='forward', command=create_window).pack(padx=5, anchor=N, pady=4) 


canvas.config(width=300,height=300) 
canvas.config(yscrollcommand=vbar.set) 
canvas.pack(side=LEFT,expand=True,fill=BOTH) 

master.mainloop() 
+0

什么错误(冲突)消息? – frankyjuang

+0

没有错误消息,应用程序不会执行任何操作。她没有开始,但她没有滚动条。 – LoveSpock

+0

你能提供完整的代码吗? – frankyjuang

回答

0

要滚动Canvas内部小部件,而不是使用通常的packgridplace方法来显示它们,你需要使用Canvascreate_window方法。该方法的语法是 canvas.create_window(x, y, window=widget, **kw)Here你可以得到有关关键字参数的细节。

例子:

import tkinter as tk 

root = tk.Tk() 

canvas = tk.Canvas(root) 
scrolly = tk.Scrollbar(root, orient='vertical', command=canvas.yview) 

# display labels in the canvas 
for i in range(10): 
    label = tk.Label(canvas, text='label %i' % i) 
    canvas.create_window(0, i*50, anchor='nw', window=label, height=50) 

canvas.configure(scrollregion=canvas.bbox('all'), yscrollcommand=scrolly.set) 

canvas.pack(fill='both', expand=True, side='left') 
scrolly.pack(fill='y', side='right') 

root.mainloop() 
+0

好的,这个语法是可能的,谢谢!还有一个问题,你使用“为我的范围”,但我没有一个标签,但有10个不同。我认为我不能和类一起工作,但是如何在不编写相同代码10次的情况下使用这0个不同的标签? – LoveSpock

+0

如果唯一不同的是标签的文本,您可以创建一个字符串列表'label_text',并用'label ='替换'label = tk.Label(canvas,text ='label%i'%i)'' tk.Label(canvas,text = label_text [i])'。 –