PyQt:如何 'global' 一个 class 中的 def 用于其他 classes?
PyQt: How to 'global' a def in one class for other classes?
在我的 PyQt5 App 中有很多 classes/windows。几乎所有的windows都包含一个相同的def
,也就是下面代码中显示的def center(self)
。有把windwo放在屏幕中间的功能
因为都是一样的,请问有没有什么方法可以把这个def
只写一次,然后写成我想象的global
,这样其他的classes/windows可以用吗?
class MyApp(QWidget):
def __init__(self):
# some definations
# click a button to open Window1
def center(self): # I have a def here.
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
class Window1(QWidget):
def __init__(self):
# some definations
def center(self):
# Question: Same def here. How to NOT write this def, but use the def from the MyApp class?
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
感谢您的帮助!
首先这不是"a def",而是一种方法
在 类 之间共享方法 - 或任何属性 - 的方法不是使它们成为全局的,而是通过创建它们可以继承的共享超类。所以你可以这样做:
class CenteredWidget(QWidget):
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
class MyApp(CenteredWidget):
def __init__(self):
# some definations
# click a button to open Window1
class Window1(CenteredWidget):
def __init__(self):
# some definations
由于 MyApp 和 Window1 都继承自 CenteredWidget,因此它们都自动获得对它定义的 center
方法的访问权。
如果没有另一个基础 class 可以适当地定义 center
.
,则使用混合 class
class Centerable(object):
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
class MyApp(QWidget, Centerable):
def __init__(self):
...
class Window1(QWidget, Centerable):
def __init__(self):
...
在我的 PyQt5 App 中有很多 classes/windows。几乎所有的windows都包含一个相同的def
,也就是下面代码中显示的def center(self)
。有把windwo放在屏幕中间的功能
因为都是一样的,请问有没有什么方法可以把这个def
只写一次,然后写成我想象的global
,这样其他的classes/windows可以用吗?
class MyApp(QWidget):
def __init__(self):
# some definations
# click a button to open Window1
def center(self): # I have a def here.
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
class Window1(QWidget):
def __init__(self):
# some definations
def center(self):
# Question: Same def here. How to NOT write this def, but use the def from the MyApp class?
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
感谢您的帮助!
首先这不是"a def",而是一种方法
在 类 之间共享方法 - 或任何属性 - 的方法不是使它们成为全局的,而是通过创建它们可以继承的共享超类。所以你可以这样做:
class CenteredWidget(QWidget):
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
class MyApp(CenteredWidget):
def __init__(self):
# some definations
# click a button to open Window1
class Window1(CenteredWidget):
def __init__(self):
# some definations
由于 MyApp 和 Window1 都继承自 CenteredWidget,因此它们都自动获得对它定义的 center
方法的访问权。
如果没有另一个基础 class 可以适当地定义 center
.
class Centerable(object):
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
class MyApp(QWidget, Centerable):
def __init__(self):
...
class Window1(QWidget, Centerable):
def __init__(self):
...