Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 放大和缩小窗口小部件_Python_Python 3.x_Pyqt_Pyqt5 - Fatal编程技术网

Python 放大和缩小窗口小部件

Python 放大和缩小窗口小部件,python,python-3.x,pyqt,pyqt5,Python,Python 3.x,Pyqt,Pyqt5,如何在小部件上使用按键输入来实现缩放效果?小部件位于滚动区域内,有一些由QPainter绘制的图形,这些图形随用户输入而更改。缩放会影响滚动条的长度,越近滚动条越小。最小级别的缩放应该使滚动条与小部件区域一样大,这样小部件中的所有内容都可以可视化 MRE: 从PyQt5导入QtCore、QtWidgets 从PyQt5.QtWidgets导入QWidget 从PyQt5.QtCore导入Qt 从PyQt5.QtGui导入QPainter、QPen、QColor 导入系统 Diedrico类(QW

如何在小部件上使用按键输入来实现缩放效果?小部件位于滚动区域内,有一些由QPainter绘制的图形,这些图形随用户输入而更改。缩放会影响滚动条的长度,越近滚动条越小。最小级别的缩放应该使滚动条与小部件区域一样大,这样小部件中的所有内容都可以可视化

MRE:

从PyQt5导入QtCore、QtWidgets
从PyQt5.QtWidgets导入QWidget
从PyQt5.QtCore导入Qt
从PyQt5.QtGui导入QPainter、QPen、QColor
导入系统
Diedrico类(QWidget):
定义初始化(自身,父级):
super()。\uuuu init\uuuu(父级)
def paintEvent(自身,事件):
qp=QPainter(自行)
qp.setPen(QPen(QColor(Qt.black),5))
qp.drawRect(50050010001000)
UiVentana类(qtwidts.QMainWindow):
def uuu init uuu(self,parent=None):
超级(UiVentana,self)。\uuu初始(父)
自我调整大小(520520)
self.widget_central=qtwidts.QWidget(self)
scrol=qtwidts.QScrollArea(self.widget_central)
scrol.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
阴囊集合几何学(QtCore.QRect(10,10,500,500))
scrol.setWidgetResizeable(False)
contenido=qtwidts.QWidget()
contenido.setGeometry(QtCore.QRect(0,0200002000))
scrol.setWidget(contenido)
self.Diedrico=Diedrico(contenido)
Diedrico.setGeometry(QtCore.QRect(0,0,20002000))
self.setCentralWidget(self.widget_central)
如果名称=“\uuuuu main\uuuuuuuu”:
app=qtwidts.QApplication(sys.argv)
ui=UiVentana()
ui.show()
sys.exit(app.exec_())
为什么要重新发明轮子?与其想实现缩放功能的逻辑,不如使用已经实现的类。在这种情况下,一个好的选择是将QGraphicsView与QGraphicscene一起使用:

注意:快捷方式标准放大和缩小分别与Ctrl++和Ctrl+-关联

从PyQt5导入QtCore、QtGui、qtwidget
Diedrico类(qtwidts.QWidget):
def paintEvent(自身,事件):
qp=QtGui.QPainter(自)
pen=QtGui.QPen(QtGui.QColor(QtCore.Qt.black),5)
qp.设置笔(笔)
qp.drawRect(50050010001000)
UiVentana类(qtwidts.QMainWindow):
系数=1.5
def uuu init uuu(self,parent=None):
超级(UiVentana,self)。\uuu初始(父)
self.\u scene=qtwidts.qgraphicscene(self)
self.\u view=qtwidts.QGraphicsView(self.\u场景)
self.\u diedrico=diedrico()
diedrico.setFixedSize(2000年,2000年)
self.\u scene.addWidget(self.\u diedrico)
self.setCentralWidget(self.\u视图)
qtwidts.QShortcut(
QtGui.QKeySequence(QtGui.QKeySequence.ZoomIn),
自认为,
context=QtCore.Qt.WidgetShortcut,
激活=自放大,
)
qtwidts.QShortcut(
QtGui.QKeySequence(QtGui.QKeySequence.ZoomOut),
自认为,
context=QtCore.Qt.WidgetShortcut,
激活=自放大,
)
@QtCore.pyqtSlot()
def放大(自):
scale_tr=QtGui.QTransform()
比例(UiVentana.factor,UiVentana.factor)
tr=自。_view.transform()*缩放\u tr
self.\u view.setTransform(tr)
@QtCore.pyqtSlot()
def缩小(自):
scale_tr=QtGui.QTransform()
比例(UiVentana.factor,UiVentana.factor)
比例倒置,可逆=比例倒置()
如果可逆:
tr=自。_view.transform()*缩放_反转
self.\u view.setTransform(tr)
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
ui=UiVentana()
ui.show()
sys.exit(app.exec_())

更新:

如果要分别对ZoomIn和ZoomOut使用+和-,只需将快捷方式更改为:

qtwidts.QShortcut(

QtGui.QKeySequence(QtCore.Qt.Key\u Plus),#我已经做了@S.NickYou可能会看看这个--@mishsx,这很有趣,但我可以在小部件中使用这个程序吗?你能解释一下并说明一下你想要什么吗?这可能会有助于引起更多的注意。@PepeElMago33。好吧,你一说更多的话就会得到答案。哪些键用于放大和缩小?@PepeElMago33使用Ctrl++和Ctrl+-它们可以重新定义吗?@PepeElMago33是的,您想更改哪些快捷方式?@PepeElMago33如果要重置缩放,请使用:
self.\u view.setTransform(QtGui.QTransform())