【问题标题】:Adding multiple lines of text to a Canvas more easily更轻松地将多行文本添加到画布
【发布时间】:2020-09-19 08:33:50
【问题描述】:

我试图在画布上添加大量文本,我希望它们垂直向下。但是文字太多,要不断添加w.create_text(),每次都替换位置和文字,这需要很长时间。有没有更简单的方法,我可以将原始文件中的文本复制并粘贴到我的代码中并正确定位?

这是我正在使用的代码:

from tkinter import *
from functools import partial
import tkinter as tk


def validateLogin(password):
    print(password.get())
    if password.get() == "test":
        master = Tk()
        canvas_width = 1920
        canvas_height = 1080
        w = Canvas(master, width=canvas_width, height=canvas_height)
        w.create_text(20, 20, text="Hi23")
        w.create_text(20, 40, text="Hi41")
        w.create_text(20, 60, text="Hi51")
        w.create_text(20, 80, text="Hi61")
        w.create_text(20, 100, text="Hi")
        w.create_text(20, 120, text="Hi71")
        w.create_text(20, 140, text="Hi7")
        w.create_text(20, 160, text="Hi1")
        w.create_text(20, 180, text="Hi2")
        w.create_text(20, 200, text="Hi9")
        w.create_text(20, 220, text="Hi8")
        w.create_text(20, 240, text="Hi3")
        w.create_text(20, 260, text="Hi2")
        w.create_text(20, 280, text="Hi2")
        w.pack()
        tkWindow.destroy()
        mainloop()

    if password.get() != "test":
        Label(tkWindow, text="Wrong password!", fg='red').grid(row=5, column=2)


# window
tkWindow = Tk()
tkWindow.geometry('250x100')
tkWindow.title('Passwords')

# password label and password entry box
Label(tkWindow, text="Password").grid(row=1, column=0)
password = StringVar()
Entry(tkWindow, textvariable=password,
      show='*').grid(row=1, column=2)

validateLogin = partial(validateLogin, password)

# login button
Button(tkWindow, text="Login",
       command=validateLogin).grid(row=4, column=2)

tkWindow.mainloop()

(我以“嗨”为例)

单词列表:

words = ["AxsorVayne", "XayahMainz", "axsor123", "AxsorLee", "Axssor", "MSFZed123", "axsor111", "Axsor123", "AxsorAshe", "axsor112", "Axsorr1233", "axsor667", "snqw", "1593", "roxxstar", "Warz", "Valsmurf", "12.august", "PBE", "League Of legends", "OSU", "Axsor", "DAUNTLESS", "EPIC  GAMES", "TAPPED OUT", "Mega", "Ups", "Unity", "SpMEO"]

【问题讨论】:

  • 也许循环通过它?
  • @CoolCloud 我不认为我可以循环浏览它,因为文本会有所不同。我仍然需要一个一个地替换文本。
  • 列出所有文本?然后遍历该列表?
  • @CoolCloud 我添加了我需要添加的单词列表

标签: python tkinter canvas text


【解决方案1】:

在主块中保留对列表的引用:

words = ["AxsorVayne", "XayahMainz", "axsor123", "AxsorLee", "Axssor", "MSFZed123", "axsor111", "Axsor123", "AxsorAshe", "axsor112", "Axsorr1233", "axsor667", "snqw", "1593", "roxxstar", "Warz", "Valsmurf", "12.august", "PBE", "League Of legends", "OSU", "Axsor", "DAUNTLESS", "EPIC  GAMES", "TAPPED OUT", "Mega", "Ups", "Unity", "SpMEO"]

然后做这样的循环:

w = Canvas(master, width=canvas_width, height=canvas_height)
count = 20
for word in words: 
    w.create_text(60, count, text=word)
    count += 20
w.pack()

是的,您可以随意调整数字并根据自己的喜好进行调整,但是如果我要这样做,这里有一个小方法来说明我将如何进行。

提示:

  • 最好去掉第二个Tk(),使用Toplevel()。这样,您还应该删除mainloop()tkWindow.destroy()。拥有多个Tk() 会在以后导致很多错误。

    master = Toplevel()
    

希望这可以帮助您消除疑问,如果有任何错误,请告诉我。

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-03
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2012-12-05
    • 1970-01-01
    相关资源
    最近更新 更多