我是PyQt4的新手,正在尝试构建用于创建电路的GUI。我使用SchemDraw创建电路图,然后将其绘制到FigureCanvas,这是GUI的一部分。很好用。我还创建了一个按钮,将一个组件添加到电路中。这也是可行的。不幸的是,保存电路的滚动区域没有更新大小/滚动条,因此电路变得比滚动区域大,因此没有正确显示。你知道吗
我添加了两个屏幕截图来显示行为:
初始情况
添加一些组件后的情况
我想要的是能够向左滚动,如果电路变宽。 有人有主意吗?你知道吗
我的代码:
import sys
from PyQt4 import QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import FigureManagerQT as Fig
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
import PyQt4.QtCore as QtCore
import SchemDraw as schem
import SchemDraw.elements as e
class Window(QtGui.QApplication):
def __init__(self, sys_argv):
super(Window, self).__init__(sys_argv)
screen_resolution = self.desktop().screenGeometry()
width, height = screen_resolution.width(), screen_resolution.height()
self.main_window = QtGui.QMainWindow()
self.main_window.setWindowTitle('App')
self.main_window.showMaximized()
# set the layout
containerMain = QtGui.QWidget()
containerMain.setStyleSheet("background-color:lightGrey;")
mainLayout = QtGui.QVBoxLayout(containerMain)
containerGraph = QtGui.QWidget()
containerGraph.setStyleSheet("background-color:lightGrey ;")
graphLayout = QtGui.QVBoxLayout(containerGraph)
containerCircuit = QtGui.QWidget()
containerCircuit.setFixedWidth(width * 0.7)
containerCircuit.setFixedHeight(height * 0.45)
circuitLayout = QtGui.QVBoxLayout(containerCircuit)
containerInput = QtGui.QWidget()
containerInput.setStyleSheet("background-color:lightGrey ;")
inputLayout = QtGui.QVBoxLayout(containerInput)
containerUpperLayout = QtGui.QWidget()
containerUpperLayout.setStyleSheet("background-color:lightGrey;")
upperLayout = QtGui.QHBoxLayout(containerUpperLayout)
containerLowerLayout = QtGui.QWidget()
containerLowerLayout.setStyleSheet("background-color:lightGrey ;")
lowerLayout = QtGui.QHBoxLayout(containerLowerLayout)
#----------------------------Graph-Layout----------------------------#
self.figure = Figure()
self.canvas = FigureCanvas(self.figure)
graphLayout.addWidget(self.canvas)
#----------------------------Circuit-Layout----------------------------#
self.circuitDrawing = schem.Drawing()
self.circuitDrawing.push()
self.circuitFigure = Figure()
self.circuitCanvas = FigureCanvas(self.circuitFigure)
self.drawCircuit()
self.scrollArea = QtGui.QScrollArea()
self.scrollArea.setWidget(self.circuitCanvas)
buttonDummy1 = QtGui.QPushButton('Add Element to Circuit')
buttonDummy2 = QtGui.QPushButton('Button')
buttonDummy1.clicked.connect(self.drawCircuit)
circuitLayout.addWidget(self.scrollArea)
circuitLayout.addWidget(buttonDummy1)
circuitLayout.addWidget(buttonDummy2)
#----------------------------Input-Layout----------------------------#
buttonDummy3 = QtGui.QPushButton('Button')
buttonDummy3.setFixedSize(50,50)
buttonDummy4 = QtGui.QPushButton('Button')
buttonDummy4.setFixedSize(50,50)
inputLayout.addWidget(buttonDummy3)
inputLayout.addWidget(buttonDummy4)
inputLayout.setContentsMargins(50,50,50,50)
#----------------------------Main-Layout----------------------------#
upperLayout.addWidget(containerCircuit)
upperLayout.addWidget(containerInput)
lowerLayout.addWidget(containerGraph)
mainLayout.addWidget(containerUpperLayout)
mainLayout.addWidget(containerLowerLayout)
self.main_window.setCentralWidget(containerMain)
def drawCircuit(self):
self.circuitDrawing.add(e.RBOX)
ax = self.circuitFigure.add_subplot(111)
# discards the old graph
ax.clear()
# plot data
self.circuitDrawing.draw(ax = ax)
# refresh canvas
self.circuitCanvas.draw()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
main = Window(sys.argv)
sys.exit(app.exec_())
更新信息: 如果我加上一行self.scrollArea.setWidgetResizable可调整大小(对),图形占据了孔区域,但是水平滚动的滚动条也没有出现。你知道吗
如果我将固定大小设置为自行电路板,我得到一个水平滚动条,但它不会更新,如果电路越来越大。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐