2017-05-17 47 views
0

更新上一个问题。在Python中添加一个QScrollBar到狭窄的QWidget中

当显示这看起来非常拥挤,请参阅下面的照片。

enter image description here

我想保持QWidget的(面板)的高度相同,并且QScrollBar添加到它的权利,所以小部件去其自然大小,并且用户只需向下滚动

我试图添加该代码。

scroll = QtGui.QScrollArea() 
scroll.setWidget(widget) 
scroll.setWidgetResizable(True) 
scroll.setFixedHeight(400) 
layout.addWidget(scroll) 

然而代码运行,但没有图形用户界面,甚至打开,所以我手动强制命令行停止。

工作代码见下文。

感谢

罗布

import sys 
from PyQt4 import QtGui 
from PySide import QtCore, QtGui 
from scapy.all import * 
from PySide.QtCore import * 
from PySide.QtGui import * 

app = QtGui.QApplication(sys.argv) 
widget = QtGui.QWidget() 
layout = QtGui.QGridLayout() 
vbox1 = QtGui.QVBoxLayout() 

button = QPushButton("Send") 

flag1 = QCheckBox("CWR") 
flag2 = QCheckBox("ECN") 
flag3 = QCheckBox("URG") 
flag4 = QCheckBox("ACK") 
flag5 = QCheckBox("PSH") 
flag6 = QCheckBox("RST") 
flag7 = QCheckBox("SYN") 
flag8 = QCheckBox("FIN") 

textEdit1 = QtGui.QTextEdit('') 
textEdit2 = QtGui.QTextEdit('') 
textEdit3 = QtGui.QTextEdit('') 
textEdit4 = QtGui.QTextEdit('') 
#textEdit5 = QtGui.QTextEdit('')#using check boxes instead 
textEdit6 = QtGui.QTextEdit('') 

def buildTCPPanal(): 
    label1 = QtGui.QLabel("IP Destanation Address") 
    label2 = QtGui.QLabel("IP Source Address") 
    label3 = QtGui.QLabel("Source Port") 
    label4 = QtGui.QLabel("Destanation Port") 
    label5 = QtGui.QLabel("Flags") 
    label6 = QtGui.QLabel("Data") 

    layout.addWidget(label1) #dest add 
    layout.addWidget(textEdit1) 

    layout.addWidget(label2) #src add 
    layout.addWidget(textEdit2) 

    layout.addWidget(label3) #src port 
    layout.addWidget(textEdit3) 

    layout.addWidget(label4) #dest port 
    layout.addWidget(textEdit4) 

    layout.addWidget(label5) #flags 
    layout.addWidget(flag1) 
    layout.addWidget(flag2) 
    layout.addWidget(flag3) 
    layout.addWidget(flag4) 
    layout.addWidget(flag5) 
    layout.addWidget(flag6) 
    layout.addWidget(flag7) 
    layout.addWidget(flag8) 


    layout.addWidget(label6) 
    layout.addWidget(textEdit6) 

    runCommandButton = QPushButton("Send Packet") 
    runCommandButton.setObjectName("runCommandButton") 

    vbox1.addLayout(layout) 
    vbox1.addWidget(runCommandButton) 
    #QtCore.QObject.connect(runCommandButton, QtCore.SIGNAL("clicked()"), createScapyCommand) 

    widget.setLayout(vbox1) 
    widget.show() 
    sys.exit(app.exec_()) 


buildTCPPanal() 
+0

什么是你的问题?你打算告诉我们你自己试过的地方吗? –

+0

嗨@MadPhysicist,我编辑了我一直在尝试的问题。感谢:) –

+0

你可以编辑你的代码,因为缩进是非常重要的python – eyllanesc

回答

1

您必须创建您放置QScrollArea一个新的小部件,并显示新的Widget。此外,将PyQt4的元素与PySide组合起来并不好。另一个不好的做法是在函数中使用超出该范围的元素。

from PyQt4 import QtGui, QtCore 
import sys 

app = QtGui.QApplication(sys.argv) 


def buildTCPPanal(): 
    widget = QtGui.QWidget() 
    layout = QtGui.QGridLayout() 
    vbox1 = QtGui.QVBoxLayout() 

    button = QtGui.QPushButton("Send") 

    flag1 = QtGui.QCheckBox("CWR") 
    flag2 = QtGui.QCheckBox("ECN") 
    flag3 = QtGui.QCheckBox("URG") 
    flag4 = QtGui.QCheckBox("ACK") 
    flag5 = QtGui.QCheckBox("PSH") 
    flag6 = QtGui.QCheckBox("RST") 
    flag7 = QtGui.QCheckBox("SYN") 
    flag8 = QtGui.QCheckBox("FIN") 

    textEdit1 = QtGui.QTextEdit('') 
    textEdit2 = QtGui.QTextEdit('') 
    textEdit3 = QtGui.QTextEdit('') 
    textEdit4 = QtGui.QTextEdit('') 
    #textEdit5 = QtGui.QTextEdit('')#using check boxes instead 
    textEdit6 = QtGui.QTextEdit('') 

    label1 = QtGui.QLabel("IP Destanation Address") 
    label2 = QtGui.QLabel("IP Source Address") 
    label3 = QtGui.QLabel("Source Port") 
    label4 = QtGui.QLabel("Destanation Port") 
    label5 = QtGui.QLabel("Flags") 
    label6 = QtGui.QLabel("Data") 

    layout.addWidget(label1) #dest add 
    layout.addWidget(textEdit1) 

    layout.addWidget(label2) #src add 
    layout.addWidget(textEdit2) 

    layout.addWidget(label3) #src port 
    layout.addWidget(textEdit3) 

    layout.addWidget(label4) #dest port 
    layout.addWidget(textEdit4) 

    layout.addWidget(label5) #flags 
    layout.addWidget(flag1) 
    layout.addWidget(flag2) 
    layout.addWidget(flag3) 
    layout.addWidget(flag4) 
    layout.addWidget(flag5) 
    layout.addWidget(flag6) 
    layout.addWidget(flag7) 
    layout.addWidget(flag8) 


    layout.addWidget(label6) 
    layout.addWidget(textEdit6) 

    runCommandButton = QtGui.QPushButton("Send Packet") 
    runCommandButton.setObjectName("runCommandButton") 

    vbox1.addLayout(layout) 
    vbox1.addWidget(runCommandButton) 
    #QtCore.QObject.connect(runCommandButton, QtCore.SIGNAL("clicked()"), createScapyCommand) 

    widget.setLayout(vbox1) 
    widget.show() 

    w = QtGui.QWidget() 
    layout = QtGui.QVBoxLayout(w) 
    scroll = QtGui.QScrollArea() 

    scroll.setWidget(widget) 
    scroll.setWidgetResizable(True) 
    scroll.setFixedHeight(400) 
    layout.addWidget(scroll) 
    w.show() 

    sys.exit(app.exec_()) 


buildTCPPanal() 

enter image description here

+0

非常感谢您的帮助,非常好。也感谢编码技巧,总是感激。 –

相关问题