print('Hello world!')
Я пытаюсь управлять одним окном pygame, используя 2 разных файла python (fish_simulator.py
и settings.py
), поэтому следующим образом у меня есть fish_simuator.py
в качестве основного файла, который будет выполнять settings.py
, если что-то происходит, но я столкнулся с проблемой обмена данными между fish simulator.py
и settings.py
с использованием файла .txt с именем storage_file.txt, так что вот часть моей программы:
Это часть fish simulator.py
pygame.init()
flags = RESIZABLE
size_of_monitor = pygame.display.Info()
width = size_of_monitor.current_w - 25
height = size_of_monitor.current_h - 50
screen = pygame.display.set_mode((width, height), flags)
#some code later
if result == 1:
#open settings
with open(r'files\storage_file.txt', 'w') as storage_file:
storage_file.write(str(screen))
exec(open(r'.\extra programs\settings.py').read())
Это часть settings.py
#inside of the code that gets executed
import pygame, os, time, random, sys
from pygame.locals import *
pygame.init()
with open(r'files\storage_file.txt', 'r') as storage_file:
screen = storage_file.read()
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.draw.rect(screen, (255, 255, 255), (random.randint(1, 400), random.randint(1, 400), 10, 10))
pygame.display.update()
time.sleep(2)
В основном коде все в порядке, screen
создается и затем сохраняется внутри storage_file.txt
, а затем, когда fish simulator
выполняется settings.py
, settings.py
извлекает screen
как строку и когда я пытаюсь a string, для запуска pygame.draw.rect(screen, (255, 255, 255), (random.randint(1, 400), random.randint(1, 400), 10, 10))
выдает ошибку
TypeError: argument 1 must be pygame.Surface, not str
поэтому вместо surface == <Surface(1234x123x12 SW)>
я получил surface == "<Surface(1234x123x12 SW)>"
из storage_file.txt
. И хотя кому-то это может показаться глупым, но я был в таком отчаянии, что попробовал raw_input() и exec(), так как больше ничего не нашел по этой проблеме, и я тоже искал в этих местах, но это не то, что я нужно:
TypeError: аргумент 1 должен быть pygame.Surface, а не str Как исправить?
TypeError: аргумент 1 должен быть pygame.Surface, а не str [Pygame с использованием кнопок]
TypeError: аргумент 1 должен быть pygame.Surface, а не str
https://cmsdk.com/python/python-typeerror-argument-1-must-be-pygame-surface-not-pygame-rect.html
https://www.reddit.com/r/pygame/comments/hsl0z6/windowblit_typeerror_argument_1_must_be/
Что вы подразумеваете под "из-за преобразования из .txt в .py"?
Проблема очевидна. Вы используете переменную
screen
дважды. Что вы ожидаете отscreen = storage_file.read()
?sceen
— это поверхность, связанная с дисплеем. Вы должны использовать другое имя для файла.Вы не можете сохранить
screen
Surface в виде текстового файла. Отображение Surface должно бытьpygame.Surface
, сгенерированнымpygame.display.set_mode
. Что вы ожидаете отstorage_file.write(str(screen))
?@Rabbid76 Я имел в виду, что когда я читаю содержимое из
storage_file.txt
внутриcode.py
, я технически преобразовываю данные изstorage_file.txt
вcode.py
, извините, если это вас смутило, я не знаю, как это объяснить должным образом"Технически я преобразовываю данные из storage_file.txt в code.py [...]" — Нет, вы не делаете ничего подобного. Все, что вы сделали, это сохранили строковое представление объекта Surface.
Ваш вопрос все еще не ясен. Вы хотите сохранить снимок экрана или значения некоторых переменных? Это совершенно разные вещи.
о... но могу ли я преобразовать строку обратно в поверхностный объект?
Я хочу сохранить значение переменной
screen
внутриfish simulator.py
и передать его вsettings.py