基本上,top.py
中的代码就像这样。我正在尝试创建一个PyQt5项目,并能够分别测试每个对话框/窗口。
import sys, os
if __name__ == '__main__':
os.chdir('../')
sys.path.insert(0,'.')
#import *
else:
pass
#from . import *
#from common import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
def main():
global window
window = MainWindow()
window.showUI()
class MainWindow(QWidget):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
def showUI(self):
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
main()
sys.exit(app.exec_())
这是一种不好的做法吗?
项目结构:
main.py
gui/
__init__.py
top.py
common/
__init__.py
common.py
答案 0 :(得分:2)
但是技术上完全可选的常见设计类似于
def real_stuff():
# ... your actual code ...
def main():
# some setup when invoked from the command line
# maybe print a hostile welcome message? (No, don't.)
real_stuff()
if __name__ == '__main__':
main()
最终条件的目的是使您的脚本可以从另一个脚本import
运行,但也可以从命令行运行python
。当你import
你不希望程序立即开始运行时,所以起点是有条件的。
你基本上可以将你拥有的所有内容放在def main()
:if __name__ == '__main__':
内,而它的工作方式完全相同。当它不是完全琐碎时,将它封装在一个单独的函数中是很好的,这样人类读者可以更容易地遵循逻辑,但就Python而言,它几乎是相同的(分开)从一个额外的函数调用的微不足道的开销。)
切向考虑是如何使您的代码足够模块化以便可重用。如果real_stuff()
是您将来可能希望从其他程序调用的有用功能,请务必将其设置为不在def main()
内或甚至在if __name__ == '__main__'
内的单独函数。如果它有可能对其他程序本身有用的片段,也可以将它们重构为单独的函数,并在需要时从其他程序中调用它们。
为了使这些函数在编程上有用,它们可能不应该进行任何面向用户的交互,因此可能将它们分解为一个单独的函数 - 再次,不一定在main()
内,而是与有意义的代码分开将来可以从其他程序中使用。无论用户交互或启动是什么,代码都可以单独运行,请放入main()
(或者,如果它完全无关紧要,甚至不为它创建单独的函数)。
答案 1 :(得分:0)
一个好的做法是拥有一个“test”文件夹,每个“窗口”有一个文件供测试。例如,“toy_test.py”文件,您可以在其中导入所需的所有内容,例如“toy.py”。并在此测试文件中剪切并粘贴主块。
但是你所做的方式是正确的,因为只有当脚本是直接调用的脚本时才会调用“if main”块。