多个输出同时缓慢打印

时间:2016-10-10 13:20:40

标签: python python-3.x tkinter

正如标题中所述,我有N个字符串(比方说3),它们一个接一个地去:

@import url(http://fonts.googleapis.com/css?family=Black+Ops+One:400,700);    /*--- Header --*/
@import url(http://fonts.googleapis.com/css?family=Open+Sans:400,700); /*---        Navigation --*/

*
{
margin: 0;
border: 0;
padding: 0;
}

body
{
background-image: url('../Music Store/img/background.png');
background-repeat: repeat-x;

}

.clearfix
{
clear:both;
}

#wrapper
{
margin: 0 auto;
max-width: 1120px;
overflow: auto;     
border: 1px solid black;
}

#main_header
{
width: 100%;
font-family: 'Black Ops One', sans-serif;
background-color: black;
border: 1px solid black;
color: white;
}

#main_header h1
{
float: left;
font-size: 380%;
margin: -10% 0 0 2%;

}

#callout
{
margin: 50px 20px 0 0;
}

#callout h2{
text-align: right;
color: white;
}

#callout p{
text-align: right;
padding: 0%;
color: grey;
font-size: 20px;
margin-bottom: 3px;
}

#nav_menu
{

width: 100%;
height: 10%;
background-color: white;
}

#nav_menu li
{
display: inline-block;
margin: 20px 20px 20px 63px;
font-family: 'Open Sans', sans-serif;
font-size: 20px;
font-weight: bold;
}

#nav_menu li a
{
text-decoration: none;
color: black;
}

#nav_menu li a:hover
{
color: grey;
}

.sub-menu
{   
position: absolute;
background-color: black;
list-style-type: none;
width: 124px;
padding-left: 0px;
margin-left: -25px;
padding-top: 5px;
opacity: 0;
}

.sub-menu li
{
padding-left: 25px;
padding-top: 5px;
padding-bottom: 5px;
}

#nav_menu li:hover .submenu
{
opacity: 1;
}

.sub-menu li:hover
{
color: green;
background-color: yellow;
}

 /*--- Start Image Slider --*/
 .slider{
max-width: 1120px;
box-shadow: 1% 2% 5% 0 rgba(0, 0, 0, 0.07);
}

.slider1 img{
width: 100%;
margin: 0 auto;
}

.slider .bx-wrapper .bx-controls-direction a{
outline: 0 none;
position: absolute;
text-indent: -9999px;
top: 40%;
height: 71px;
width: 40px;
z-index: -1;
transition: all 0.7s;
}

.slider .bx-wrapper:hover .bx-controls-direction a{
z-index: 5;
}

.slider .bx-wrapper .bx-prev{
background: url("../Music Store/img/arrow_left.png") no-repeat 7px 9px;
left: 0px;
}

.slider .bx-wrapper .bx-prev:hover{
background:  url("../Music Store/img/arrow_left.png") no-repeat 8px 15px;
}

.slider .bx-wrapper .bx-next{
background:  url("../Music Store/img/arrow_right.png") no-repeat 10px 12px;
right: 0px;
}

.slider .bx-wrapper .bx-next:hover{
background:  url("../Music Store/img/arrow_right.png") no-repeat 10px 17px; 
}

/*--- End Image Slider --*/

.one-third img{
text-align: center;
max-width: 100%;
height: auto;
opacity: 0.9;
}

 .border_section p{
font-family: 'Lato', sans-serif;
padding: 2%;
color: white;
text-align: justify;
}

.border_section h3
{
font-family: 'Open Sans', sans-serif;
text-align: center;
color: white;
text-transform: uppercase;
letter-spacing: 1%;
}

.border_section
{
border: 1px solid black;
background-color: black;
}


.one-third{
width: 27.35%;
float: left;
margin: 2% 0 3% 4.5%;
text-align: center;
background-color: white;
}

footer{
font-family: 'Open Sans', sans-serif;
font-weight: bold;
text-align: center;
width: 100%;
height: 6%;
background-color: black;
overflow: auto;
}

footer p
{
margin-top: 1%;
color: white;
}

在'睡眠'的帮助下,我们可以慢慢地打印出字符串,逐个符号,但我想让它们在同一时间慢慢打印出来。有可能做这样的事吗?

问题 - lvl.'Advanced':我可以制作3个带有文字的tkinter按钮吗?或者也许最好创建具有​​这种文字效果的标签(如果可能的话)并立即用3个相同单词的按钮替换它们?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你想创建一个标签,一次慢慢地显示一个角色(即:首先你看到" s",然后" st",然后& #34; str"等)。

通过创建自定义标签类并使用after慢慢显示文本,可以进行锥形操作。每次调用函数reveal_text时,它会从剩余字符列表中弹出一个字符,将其附加到已经显示的字符,然后安排自己在半秒钟内再次调用。

例如:

class SlowLabel(tk.Label):
    def __init__(self, *args, **kwargs):
        tk.Label.__init__(self, *args, **kwargs)

        self.text = self.cget("text")
        self.configure(text="")

        self.reveal_text()

    def reveal_text(self):
        if len(self.text) > 0:
            text = self.cget("text") + self.text[0]
            self.configure(text=text)
            self.text = self.text[1:]
            self.after(500, self.reveal_text)

您可以像使用普通标签一样使用此类:

import tkinter as tk
root = tk.Tk()
for text in ("string1", "string2", "string3"):
    label = SlowLabel(root, text=text, width=20, anchor="w")
    label.pack(side="top", fill="x")

如果您更喜欢按钮而非标签,则只需继承tk.Button而不是tk.Label