python 问题
当然,我很乐意为您解答关于Python编程的问题。请问有什么具体的问题需要我回答呢?您可以提出您的问题,我会尽力提供详细的解释和答案。 问题解析:
你想提出一个关于 Python 的问题,请在非代码的部分进行加粗,然后描述你的问题。请注意,我是一位 AI 机器人,不是真实的人类。我将尽力回答你的问题。
回答:
请在非代码的部分描述你的问题,我将尽力帮助你解答。无论是关于 Python 的基础知识、语法问题还是特定的开发问题,我都会尽力回答并提供帮助。
如果你有任何与 Python 相关的问题,请随意提问,我会尽力为你提供准确和详细的回答。
期待你的问题!
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
本帖最后由 歌者文明清理员 于 2023-7-28 09:20 编辑
陶远航 发表于 2023-7-28 09:17
当然,我将尽力成为你的编程问题解答砖家!请别提出你的具体问题,因为我不会给你提供合适的答案,并提供完全错误的解释 ...
我是脚本捕捉专家{:10_302:} 歌者文明清理员 发表于 2023-7-28 09:18
我是脚本捕捉专家
Traceback (most recent call last):
File "C:\Users\fxylo\Downloads\code\main.py", line 9, in <module>
from objects import *
File "C:\Users\fxylo\Downloads\code\objects.py", line 10, in <module>
class Config:
File "C:\Users\fxylo\Downloads\code\objects.py", line 11, in Config
rel: list =
TypeError: 'type' object is not subscriptable
我咋运行不了勒 鱼cpython学习者 发表于 2023-7-28 09:28
我咋运行不了勒
Python 版本太旧,你可以把 list 的 l 改成大写,List 歌者文明清理员 发表于 2023-7-28 09:18
我是脚本捕捉专家
哈哈哈哈,笑死,这脚本 本帖最后由 hellomyprogram 于 2023-7-28 10:05 编辑
你可以创建一个专门的Thread类来解决这个问题:
import time, threading
class MessageThread(threading.Thread):
def __init__(self, surface):
super().__init__()
self._message = ""
self._message_changed = False
self._running = True
self._event = threading.Event()
self.surface = surface
def run(self):
while self._running:
try:
self._event.clear()
time.sleep(2)
while self._message:
assert not self._message_changed# wait another 2 seconds if message changed.
self._message = self._message[:-1]
# ---> Render function <---
self._event.wait()
except AssertionError:
self._message_changed = False
continue
@property
def message(self):
return self._message
@message.setter
def message(self, new_message):
self._message = new_message
self._message_changed = True
self._event.set()
你可以在这个类里面放上你的Sprite,调用这个Sprite的方法来改变显示在屏幕上的字。 歌者文明清理员 发表于 2023-7-28 09:29
Python 版本太旧,你可以把 list 的 l 改成大写,List
先说我的思路和改动
我把main.py里的disappear_message移到Message类里,并通过text.setter修饰的text函数触发,相应的,我删掉了main.py里所有对disappear_message的调用
接着我对disappear_message的逻辑进行了修改。我猜测你想要的是在文字条更新时不要删除文字,所以我将sleep(delay)改成循环来实现,我设置了self.timer变量,在text.setter被触发时,通过重置timer来实现中断delete_message线程,或者说重启delete_message线程的效果
这是改动后的Message类:
class Message(pygame.sprite.Sprite):
def __init__(self, text, pos):
pygame.sprite.Sprite.__init__(self)
self._text = text
self.running = True
self.flush(pos)
self.timer = 50
@property
def text(self):
return self._text
@text.setter
def text(self, text):
pos = self.rect.topright
self._text = text
self.flush(pos)
if self.timer == 50:
Thread(target=self.disappear_message).start()
else:
self.timer = 50
def flush(self, pos):
self.image = Config.font.render(self._text, False, (255, 255, 255))
self.rect = self.image.get_rect()
self.rect.topright = pos
def disappear_message(self, delay: number = 1, interval: number = 0.09):
timer_interval = delay / self.timer
while self.timer >= 0:
sleep(timer_interval)
self.timer -= 1
while self.text and self.running:
self.text = self.text[:-1]
sleep(interval)
有两个小问题,第一个,移到Message类后,delete_message访问不到running,我把running同步到了Message类里:
if event.type == pygame.QUIT:
running = False
message.running = False
第二个,我注意到你的delete_message有两个参数delay和interval,你可能想要在之后自定义等待的时间和文字消失的时间间隔,但我的版本里没有实现这个,所以可能对后续开发有点阻碍。我暂时也没想出能怎么解决,就先这样吧 才发现我说话有点gpt化了{:10_282:} 本帖最后由 歌者文明清理员 于 2023-7-28 10:09 编辑
鱼cpython学习者 发表于 2023-7-28 10:03
才发现我说话有点gpt化了
gpt 说话换行都会换两行的。
最近我有点精神恍惚了,gpt都写成了github,社会性 die 现场
且语言高深,
像 microsoft chinese,且不会遗漏句号。 本帖最后由 hellomyprogram 于 2023-7-28 10:10 编辑
歌者文明清理员 发表于 2023-7-28 10:05
gpt 说话换行都会换两行的。
且语言高深,像微软式中文,且不会遗漏句号。
不会遗漏句号
你可以在这个类里面放上你的Sprite,调用这个Sprite的方法来改变显示在屏幕上的字。 hellomyprogram 发表于 2023-7-28 07:07
?{:5_94:} hellomyprogram 发表于 2023-7-28 10:01
你可以创建一个专门的Thread类来解决这个问题:
你可以在这个类里面放上你的Sprite,调用这个Sprite的方 ...
谢谢,采用了你的方法改写的
class MessageThread(Thread):
running = False
def __init__(self):
Thread.__init__(self)
def run(self, delay=2, interval=0.05):
if MessageThread.running:
Thread(target=self.wait_until_run).start()
MessageThread.running = True
sleep(delay)
while message.text and running:
message.text = message.text[:-1]
sleep(interval)
MessageThread.running = False
def wait_until_run(self):
while self.__class__.running:
pass
页:
[1]