【问题标题】:Creating multiple objects to then use in tkinter?创建多个对象然后在 tkinter 中使用?
【发布时间】:2021-01-15 09:54:25
【问题描述】:

我想知道是否有可能做到这一点,我有一个包含大约 20 个字母的文本文件,并且每个字母都需要“绘制”或显示一个矩形(大小相同)。对于每个字母,它们都有自己的颜色。它们的属性将是高度宽度和颜色(高度和宽度都是恒定值)我计划使用 tkinter 来“绘制”它,因为它对我来说更简单。但我想知道创建类的实例是否更容易,因此文本文件中的每个字母都成为具有自己的高度颜色和宽度的对象。这会让我更容易在 tkinter 中创建形状吗?如果是这样,我将如何实现为文本文件中的每个项目创建一个对象?

如果我没有说清楚,我很抱歉

编辑:这是我尝试为此编写代码的悲伤尝试.. Sequencedfile1 = 每行一个字母的文本文件

class Sequence:

def __init__(self, width, height, base):
    self.width = 75
    self.height = 100
    self.base = base


def create_base_objects(self, width, height, base):
    f = open("sequencedfile1.txt", "r+")
    with open('sequencedfile1.txt', 'r') as f:
        for item in f:
            for x in range(0, 1):
                 str(object,x) = Sequence(75, 100, item)

【问题讨论】:

  • 是的,这可能是对象的理想用途。每个实例都有相同的属性,但这些属性的值可能完全不同。
  • 当然可以。但您需要提供minimal reproducible example
  • 谢谢!我已经编辑了帖子并添加了我的编码尝试
  • str(object,x) = ... 应该做什么?我想你可能只想要一个列表理解:objects = [Sequence(75, 100, item) for item in f]。还有,文件不要打开两次,去掉with上面的f = ...
  • 我不确定如何实现它,但在我的脑海中我想要它,这样每个对象都可以称为 object1、object2 等

标签: python class oop tkinter


【解决方案1】:

这里有详细的解释: 我创建了一个文本文件为“try.txt”,并在上面写了 hello 作为示例文本。

需要进口:

import tkinter as tk
import time
import random
import threading

主体: 类块将创建一个具有用户在调用时给出的颜色和文本的对象。place 函数将打包“(如果需要,可以更改为放置)”在 tkinter 窗口上创建的对象,该对象由用户(根)。

函数 create block 将读取文件中的每个字母,并使用计算机在 random.choice 中选择的任何随机颜色创建该字母的对象。 这里 time.sleep() 用于给这个东西一个动画的外观。

class blocks:
    def __init__(self,colour,text):
        self.colour=colour
        self.width=5
        self.height=5
        self.text=text

    def place(self,root):
        self.name=tk.Label(root,text=self.text,width=self.width,height=self.height,bg=self.colour)
        self.name.pack()

def create_blocks():
    f=open('try.txt','r')
    r=f.read()
    for i in r:
        col=random.choice(['red','blue','green','yellow','pink'])
        i=blocks(col,i)
        i.place(window)
        time.sleep(1)

为 tkinter 制作窗口: 创建主 tkinter 窗口,当按下按钮时,将启动一个单独的线程,该线程将调用/启动 create_blocks 函数。

window=tk.Tk()
window.geometry('400x400')
boo=tk.Button(text='TRY',command=threading.Thread(target=create_blocks).start).pack()
window.mainloop()

【讨论】:

  • 你能帮我解决这段代码的范围问题吗? @死亡大师
  • 我没听懂你在问@el1101,其实我也是 tkinter 和 stackoverflow 的新手
猜你喜欢
  • 2014-07-22
  • 1970-01-01
  • 2014-07-17
  • 2019-06-27
  • 2012-09-16
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 2017-02-24
相关资源
最近更新 更多