首页 > 解决方案 > Tkinter 标签被切断

问题描述

所以我对 Tkinter 和整个 Python 都很陌生。我正在做一个从互联网上获取歌词的项目,或者简单地将它们显示给你,或者使用马尔可夫链来生成一首随机歌曲。我已经让代码工作了,我现在只是想实现一个 GUI。我已经到了可以输入歌曲和艺术家的地步,程序会给你歌词。不过现在,歌词仍然出现在控制台中。我现在正试图将歌词放入 GUI 中,但是当我尝试将它们放入文本时会被切断。我使用了 tkinter 部分的教程,所以我不确定代码的哪一部分是相关的。有问题的文本在 GetLyrics 类中。(lyric_label) 目前仅使用“示例”作为占位符。提前非常感谢你,如果我'请告诉我'

这是问题的图片:

import get_lyrics
import textwrap
import tkinter as tk
from tkinter import ttk
from cc_markov import MarkovChain
lyric_data = MarkovChain()
LARGE_FONT = ("Verdana", 12)
small_font = ("Verdana", 10)


class lyrGenApp(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        tk.Tk.iconbitmap(self, "logo.ico")
        tk.Tk.wm_title(self, "LyrGen")
        tk.Tk.wm_geometry(self, '1024x576')                                      
        self.resizable(False, False)

        container = tk.Frame(self)
        container.pack(side="top", fill="both")
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}

        for F in (StartPage, GenLyrics, GetLyrics):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

class StartPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="Lyrgen", font=LARGE_FONT)
        label.pack(pady=10, padx=10)
        gen_button = ttk.Button(self, text="Generate Lyrics",
                               command=lambda: 
controller.show_frame(GenLyrics))
        gen_button.pack()
        get_button = ttk.Button(self, text="Get Lyrics",
                               command=lambda: 
controller.show_frame(GetLyrics))
        get_button.pack()

class GenLyrics(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="Generate Lyrics", font = LARGE_FONT)
        label.pack(pady = 10, padx = 10)
        button1 = ttk.Button(self, text="Home",
                            command=lambda: controller.show_frame(StartPage))
        button1.pack()

class GetLyrics(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="Get Lyrics", font = LARGE_FONT)
        label.place(relx = 0.5, rely = 0.3, anchor = 's')

        prompt_song = tk.Label(self, text = "Enter Song:", font = small_font)
        prompt_song.place(relx = 0.38, rely = 0.6, anchor = 's')

        prompt_artist = tk.Label(self, text = "Enter Artist:", font = 
small_font)
        prompt_artist.place(relx = 0.38, rely = 0.8, anchor = 's')


        song_entry = tk.Entry(self)
        song_entry.place(relx = 0.5, rely = 0.6, anchor = 's')

        artist_entry = tk.Entry(self)
        artist_entry.place(relx = 0.5, rely = 0.8, anchor = 's')

        home_button = ttk.Button(self, text="Home",
                            command=lambda: controller.show_frame(StartPage))
        home_button.place(relx = 0.1, rely = 0.7, anchor = 's')

        lyric_label = tk.Label(self, text = "example", font = small_font, 
justify = "left")
        lyric_label.place(relx = .1, rely = .85)

        lyrics = []
        def get_button(list):
            lyrics = list

            print(" ".join(lyrics))

        search_button = ttk.Button(self, text="Search", command= lambda:
        get_button(get_lyrics.get_song(song_entry.get(), 
artist_entry.get())))


        search_button.place(relx = 0.6, rely = 0.7, anchor = 's')


app = lyrGenApp()
app.mainloop()

标签: pythontkinter

解决方案


在此行中减少relyto.8或类似的值:.75

lyric_label.place(relx = .1, rely = .85)

改成 :

lyric_label.place(relx = .1, rely = .8)

或者

lyric_label.place(relx = .1, rely = .75)

推荐阅读