2017-05-17 3 views
0

이전 질문에 대한 업데이트.파이썬에서 비좁은 QWidget에 QScrollBar 추가

표시 할 때 매우 좁아 보입니다. 아래 사진을 참조하십시오. 나는 위젯 자연 크기를 이동하고 사용자가 단지

를 아래로 스크롤 할 수 있도록는 QWidget (패널) 같은 높이를 유지하고, 그것의 오른쪽에 QScrollBar을 추가하고 싶습니다

enter image description here

나는이 코드를 추가했습니다.

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

코드가 실행되지만 GUI도 열리지 않는, 그래서 수동으로 명령 줄에서 강제로 중지 그러나.

작동 코드는 아래에 나와 있습니다.

감사

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

들여 쓰기가 파이썬에서 매우 중요하기 때문에 코드를 편집 할 수 있습니다 – eyllanesc

답변

1

당신은 당신이 QScrollArea을 배치 새로운 위젯을 만들고, 그 새로운 위젯을 표시해야합니다. 또한 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

도움을 주셔서 대단히 감사드립니다. 또한 코딩 팁에 대한 감사, 항상 감사드립니다. –

관련 문제