- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
以下是使用 PyCharm Community Edition 中的 Tkinter 在 Python 3.0 中对 Conway 的生命游戏的不完整实现。
程序由四个文件组成:
from random import randint
from tkinter import *
class Cell:
def __init__(self, master, state=None):
if state is None:
state = randint(0,2)
self.state = state
self.next_state = state
self.button = Button(master, width=2, height=1, bg = 'black' if self.state == 1 else 'white').pack(side=LEFT)
def __del__(self):
self.button.destroy()
def set_next_state(self, neighbours):
if self.state == 1:
self.next_state = 0 if neighbours < 2 or neighbours > 3 else 1
else:
self.next_state = 1 if neighbours == 3 else 0
def update(self):
self.state = self.next_state
self.button.config( bg = 'black' if self.state == 1 else 'white')
from tkinter import *
from Cell import Cell
class Grid:
def __init__(self, master, rows=15, cols=15, wraparound=True, pattern=None):
self.master = master
self.rows = rows
self.cols = cols
self.wraparound = wraparound
if len(self.pattern) == rows*cols: self.pattern = pattern
else: self.pattern = None
self.create_frames()
self.create_cells()
def create_frames(self):
self.frames = [Frame(self.master).pack(side=TOP) for r in range(self.rows)]
def destroy_frames(self):
for r in range(self.rows):
self.frames[r].destroy()
def create_cells(self):
self.cells = {}
for r in range(self.rows):
for c in range(self.cols):
if self.pattern is None: self.cells[(r,c)] = Cell(self.frames[r])
else: self.cells[(r,c)] = Cell(self.frames[r], state=self.pattern[r*self.cols+c])
def destroy_cells(self):
for r in range(self.rows):
for c in range(self.cols):
del self.cells[(r,c)]
def count_neighbours(self, r, c):
offsets = [(i,j) for j in range(-1,2) for i in range(-1,2)]
offsets.remove((0,0))
neighbours = 0
for offset in offsets:
if self.wraparound:
neighbours += self.cells[((r+offset[0])%self.rows, (c+offset[1])%self.cols)].state
else:
if r+offset[0] >= self.rows or r+offset[0] < 0 or c+offset[1] >= self.cols or c+offset[1] < 0:
neighbours += 0
else:
neighbours += self.cells[(r+offset[0], c+offset[1])].state
return neighbours
def calculate_next_state(self):
for r in range(self.rows):
for c in range(self.cols):
neighbours = self.count_neighbours(r,c)
self.cells[(r,c)].set_next_state(neighbours)
def update_cells(self):
for r in range(self.rows):
for c in range(self.cols):
self.cells[(r,c)].update()
def step(self):
self.calculate_next_state()
self.update_cells()
def load_pattern(self, rows=10, cols=10, wraparound=True, pattern=None):
self.destroy_cells()
self.destroy_frames()
self.rows = rows
self.cols = cols
self.wraparound = wraparound
self.pattern = pattern
self.create_frames()
self.create_cells()
from Grid import Grid
from tkinter import *
class MainWindow:
def __init__(self, rows=10, cols=10, wraparound=True, pattern=None):
self.root = Tk()
grid_frame = Frame(self.root).pack(side=TOP)
self.grid = Grid(grid_frame, rows=rows, cols=cols, wraparound=wraparound, pattern=pattern)
button_frame = Frame(self.root).pack(side=BOTTOM)
self.time_interval = 1000
self.start_stop_button = Button(button_frame, text='START', command=self.start_stepper).pack(side=LEFT)
self.step_button = Button(button_frame, text='STEP', command=self.grid.step)
self.menubar = Menu(self.root)
self.menubar.add_command(label='Change Time Interval', command=self.change_time_interval)
self.root.config(menu=self.menubar)
self.root.mainloop()
def change_time_interval(self):
# Incomplete
pass
def start_stepper(self):
# Incomplete
pass
def stop_stepper(self):
# Incomplete
pass
from Windows import MainWindow
game = MainWindow()
当我运行 main.py 时,我得到以下输出:
Traceback (most recent call last):
File "C:/Users/Tyler/PycharmProjects/GameOfLife/main.py", line 3, in <module>
game = MainWindow()
File "C:\Users\Tyler\PycharmProjects\GameOfLife\Windows.py", line 9, in __init__
self.grid = Grid(grid_frame, rows=rows, cols=cols, wraparound=wraparound, pattern=pattern)
TypeError: object.__new__() takes no parameters
我对此束手无策,因为我从未覆盖默认的 __new__
方法。在检查了所有其他此类堆栈溢出问题后,大多数解决方案都将某种形式的拼写 __init__
更正为 __init__
。我对 python 脚本编写相对较新,因此非常感谢任何帮助调试它并解释为什么会产生错误。
最佳答案
Tkinter 有一个名为 Grid 的类,它隐藏了您自己的同名类,因为您在导入自己的类后使用了 from tkinter import *
。
有几种可能的解决方案:
from Grid import Grid as MyGrid
,然后在您想使用自己的 Grid 类时调用 MyGrid
。from Grid import Grid
导入移动到 tkinter 之后(只要您不需要使用 tkinter Grid 类)。import tkinter
并使用 tkinter.Frame
等访问 tkinter 类(如 Frame)。关于python - 接收 TypeError : object. __new__() 在 __new__ 未更改时不带任何参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38044773/
为什么下面的代码会出错? class Foo: def __new__(cls, *args, **kwargs): print("Creating Instance")
Documentation for object.__new__(cls[, ...]) says: Called to create a new instance of class cls. __
编码异常类,我遇到了这个错误: TypeError: object.__new__(A) 不安全,使用 Exception.__new__() 这里有一个类似的问题: TypeError: objec
以下是使用 PyCharm Community Edition 中的 Tkinter 在 Python 3.0 中对 Conway 的生命游戏的不完整实现。 程序由四个文件组成: Cell.py:包含
阅读本文时:What is a metaclass in Python? ,我正在学习使用 __new__ 使用以下代码段:- class a(object): pass a.__new__(
前言 我想要具有以下属性的 2 个类 Interval 和 Segment: Interval 可以有 start 和 end 点,它们中的任何一个都可以被包含/排除(我已经使用必需的标志参数实现了这
我知道当我们通过 super 方法调用父方法时,我们可以忽略绑定(bind)方法中的“self”参数,如下所示: class Foo(object): def __init__(self):
假设以下代码: class NumStorage(object): def __new__(cls, *nargs): name = cls.__name__
嗨,我一直收到这个错误,我不知道如何避免。 我有以下代码: class retrieve_account_data(Thread): _account_queue = None _di
假设我有一些调用 __new__ 的类,我如何才能很好地使用 mro 并根据需要调用父类(super class)的 __new__(带参数),但不使用附加参数调用 object.__new__?例如
我正在尝试像这样深度复制我的 igraph 对象: copy.deepcopy(graph) 其中 graph 是 igraph 对象,一个只有几个顶点的完整图。但是我得到这个错误: Fi
假设我有以下代码用于处理个人和国家/地区之间的链接: from dataclasses import dataclass @dataclass class Country: iso2 : st
我知道类是元类的实例,并且 __new__ 在 __init__ 之前运行,因为,您必须在初始化它之前创建一个实例。 现在想象一下: import time class ConfigurationsM
使用Python元类A创建一个新类B。 当C继承B时,为什么调用A的__new__方法? class A(type): def __new__(cls, name, bases, attrs)
案例1: class Person: def __new__(cls, *args, **kwargs): print "called" return supe
我可以知道为什么 myClass1 和 myClass2 在覆盖 __new__() 方法时表现不同吗?推荐使用哪种方式来编写类,为什么?我认为 myClass1(): 甚至没有调用 __new__(
当__new__返回类的实例时,一切正常,我们可以毫无问题地创建子类: class A: def __new__(cls, p1, p2): self = object.__n
如何编写默认的 __new__ 并进行一些小的更改,如下所示: class A: def __new__(cls, *args, **kwargs): retval = sup
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我一直在努力理解__new__ 和元编程。所以我看了一下官方的 python 源代码。 http://hg.python.org/cpython/file/2.7/Lib/fractions.py 分
我是一名优秀的程序员,十分优秀!