python - 为什么我的 python 脚本运行正常,但在我尝试跟踪它时却没有?
问题描述
我正在用 pygame 制作游戏,但遇到了一些问题。游戏经常无缘无故变慢,所以我尝试使用 python 内置的跟踪模块对其进行跟踪。但是,由于某种原因,当我正常执行它时,它可以完美运行
py main.py
但是当我这样做的时候
py -m trace --trace main.py
它给了我以下错误:
File "F:\Downloads\Tanks (2)\Tanks\Tanks\Scripts\render.py", line 13, in load_UI
play_online_button = pgGui.elements.UIButton(pg.Rect((362 * main.res_multiplier, 200 * main.res_multiplier), (300 * main.res_multiplier, 60 * main.res_multiplier)), "Speel Online", main.UI_manager)
AttributeError: module '__main__' has no attribute 'res_multiplier'
而如下所示,属性 res_multiplier 显然是在 load_UI() 运行之前创建的。这可能是因为我正在导入其他脚本吗?
以下是相关的代码:
import Scripts.render as render
def start_game():
WIDTH = 1024
HEIGHT = 576
global res_multiplier
res_multiplier = WIDTH / 1024
#I skipped a bunch of stuff here
render.load_UI()
while running:
#main game loop
if __name__ == __main__:
start_game()
以及相关功能:
def load_UI():
global fullscreen
fullscreen = False
#Startmenu
global play_local_button, play_online_button, res_menu, quit_button
play_online_button = pgGui.elements.UIButton(pg.Rect((362 * main.res_multiplier, 200 * main.res_multiplier), (300 * main.res_multiplier, 60 * main.res_multiplier)), "Speel Online", main.UI_manager)
play_local_button = pgGui.elements.UIButton(pg.Rect((362 * main.res_multiplier, 290 * main.res_multiplier), (300 * main.res_multiplier, 60 * main.res_multiplier)), "Speel Lokaal", main.UI_manager)
res_menu = pgGui.elements.UIDropDownMenu(["1920x1080","1600x900","1366x768","1280x720", "1024x576"], "1024x576", pg.Rect((700 * main.res_multiplier, 20 * main.res_multiplier), (300 * main.res_multiplier, 30 * main.res_multiplier)), main.UI_manager)
quit_button = pgGui.elements.UIButton(pg.Rect((0 * main.res_multiplier, 0 * main.res_multiplier), (140 * main.res_multiplier, 40 * main.res_multiplier)), "Spel verlaten", main.UI_manager)
#Onlinemenu
global ip_text_entry, port_text_entry, connect_button, back_button, connect_error_text, client_port_text_entry
ip_text_entry = pgGui.elements.UITextEntryLine(pg.Rect((362 * main.res_multiplier, 200 * main.res_multiplier), (300 * main.res_multiplier, 20 * main.res_multiplier)), main.UI_manager)
ip_text_entry.set_text("127.0.0.1")
port_text_entry = pgGui.elements.UITextEntryLine(pg.Rect((362 * main.res_multiplier, 240 * main.res_multiplier), (300 * main.res_multiplier, 20 * main.res_multiplier)), main.UI_manager)
port_text_entry.set_text("1234")
client_port_text_entry = pgGui.elements.UITextEntryLine(pg.Rect((362 * main.res_multiplier, 280 * main.res_multiplier), (300 * main.res_multiplier, 20 * main.res_multiplier)), main.UI_manager)
client_port_text_entry.set_text("1235")
connect_button = pgGui.elements.UIButton(pg.Rect((362 * main.res_multiplier, 320 * main.res_multiplier), (300 * main.res_multiplier, 50 * main.res_multiplier)), "Verbinden & Spelen", main.UI_manager)
back_button = pgGui.elements.UIButton(pg.Rect((0 * main.res_multiplier, 0 * main.res_multiplier), (260 * main.res_multiplier, 40 * main.res_multiplier)), "Terug naar het startmenu", main.UI_manager)
connect_error_text = pgGui.elements.UITextBox("We kunnen geen verbinding maken met de server. Controleer of de server op het goede ip en poort is ingesteld en of je ze hier goed hebt ingevuld.", pg.Rect((690 * main.res_multiplier, 200 * main.res_multiplier), (300 * main.res_multiplier, 130 * main.res_multiplier)), main.UI_manager)
hide_list = [ip_text_entry, port_text_entry, connect_button, back_button, connect_error_text, client_port_text_entry]
for x in hide_list:
x.hide()
解决方案
res_multiplier
您应该作为参数传递:
#main
render.load_UI(res_multiplier)
#render
def load_UI(res_multiplier):
global fullscreen
fullscreen = False
#Startmenu
global play_local_button, play_online_button, res_menu, quit_button
play_online_button = pgGui.elements.UIButton(pg.Rect((362 * res_multiplier, 200 * res_multiplier), (300 * res_multiplier, 60 * res_multiplier)), "Speel Online", main.UI_manager)
推荐阅读
- java - 为什么 && 作为回报和铸造?
- python - 如何为要在 windows10 上的 python3.8 32bits 上运行的库打包轮子?
- google-apps-script - Apps Script 适合公共服务应用吗?
- javascript - 无法使用 ajax 开发登录页面
- c++ - 使用 std::move over ofstream
- scala - 基于优先级匹配的 Spark SQL 连接
- java - 运行spring boot项目时编译过程出错
- javascript - 在一个功能中添加 2 个逐行文本阅读器
- database - Laravel 队列导致数据库连接计数溢出?
- node.js - Firebase 功能 HTTPS 403 禁止