2017-12-29 8 views
0

(나는 절대 PyQt는 초보자입니다.)QListWidget 선택으로 QLabel을 연결

나는 사용자가 매우 아래로 스크롤 화살표 키를 사용할 때마다 소프트웨어 옵션에 대한 설명과 함께 QLabel를 업데이 트하려는 QListWidget에 표시되는 긴 옵션 목록 또는 QListWidget의 옵션 클릭. 이미 클릭 옵션을 연결하여 원하는 작업을 수행했지만 화살표 키 누름을 감지하는 방법을 알 수 없습니다.

내가 지금까지 무엇을 가지고 :

main.ui을

<?xml version="1.0" encoding="UTF-8"?> 
<ui version="4.0"> 
<class>Dialog</class> 
<widget class="QDialog" name="Dialog"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>341</width> 
    <height>244</height> 
    </rect> 
    </property> 
    <property name="windowTitle"> 
    <string>Dialog</string> 
    </property> 
    <widget class="QWidget" name="verticalLayoutWidget"> 
    <property name="geometry"> 
    <rect> 
    <x>10</x> 
    <y>10</y> 
    <width>321</width> 
    <height>231</height> 
    </rect> 
    </property> 
    <layout class="QVBoxLayout" name="verticalLayout"> 
    <item> 
    <widget class="QListWidget" name="lwOptions"/> 
    </item> 
    <item> 
    <widget class="QLabel" name="lbDescription"> 
     <property name="text"> 
     <string>TextLabel</string> 
     </property> 
    </widget> 
    </item> 
    <item> 
    <widget class="QDialogButtonBox" name="buttonBox"> 
     <property name="standardButtons"> 
     <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> 
     </property> 
    </widget> 
    </item> 
    </layout> 
    </widget> 
</widget> 
<resources/> 
<connections> 
    <connection> 
    <sender>buttonBox</sender> 
    <signal>accepted()</signal> 
    <receiver>Dialog</receiver> 
    <slot>accept()</slot> 
    <hints> 
    <hint type="sourcelabel"> 
    <x>170</x> 
    <y>228</y> 
    </hint> 
    <hint type="destinationlabel"> 
    <x>170</x> 
    <y>121</y> 
    </hint> 
    </hints> 
    </connection> 
</connections> 
</ui> 

test.py

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import sys 
from PyQt5 import uic, QtWidgets 
from PyQt5.Qt import QMessageBox 

class GUI(QtWidgets.QDialog): 
    listOptions = [] 
    dicDescriptions = {} 
    for x in range(0, 100): 
     option = 'Option ' + str(x) 
     description = 'Description for ' + option 
     listOptions.append(option) 
     dicDescriptions[option] = description 

    def __init__(self): 
     super(GUI, self).__init__() 
     uic.loadUi('C:/Users/User/Desktop/main.ui', self) 
     self.accepted.connect(self.ReadValue) 
     self.lwOptions.addItems(self.listOptions) 
     self.lwOptions.itemClicked.connect(self.UpdateDescription) 
     self.lbDescription.setText(self.dicDescriptions[self.listOptions[0]]) 

    def UpdateDescription(self): 
     currentItem = self.lwOptions.currentItem().text() 
     self.lbDescription.setText(self.dicDescriptions[currentItem]) 

    def ReadValue(self): 
     currentItem = self.lwOptions.currentItem().text() 
     QMessageBox.information(self, "Selection", "You've selected: " + currentItem) 

app = QtWidgets.QApplication(sys.argv) 
window = GUI() 
window.show() 
sys.exit(app.exec_()) 
화살표 키 입력을 감지 할 방법
  1. 및 QLabel을 업데이트하십시오.
  2. 어떻게 사용합니까? uic.loadUi 상대 경로가 있습니까? 나는 uic.loadUi ('main.ui', self)uic.loadUi ('./ main.ui', self)을 시도했지만 두 파일이 같아도 작동하지 않았다. 폴더. 당신이 현재 아이템을 획득 할 경우 itemClicked()를 사용할 필요가 없습니다

답변

1

, 당신은 새로운 항목이 선택 될 때마다 발행되는 신호 itemSelectionChanged()를 사용해야합니다. 경로의 문제는 스크립트를 실행하는 위치에 따라 경로가 달라지기 때문에 스크립트의 위치에 의존하지 않기 때문에 발생합니다.이 경우 코드에서 파일의 전체 경로를 인식하는 것이 좋습니다. 구현은 다음 섹션에 있습니다.

import os 
import sys 
from PyQt5 import uic, QtWidgets 
from PyQt5.Qt import QMessageBox 

class GUI(QtWidgets.QDialog): 
    listOptions = [] 
    dicDescriptions = {} 
    for x in range(0, 100): 
     option = 'Option ' + str(x) 
     description = 'Description for ' + option 
     listOptions.append(option) 
     dicDescriptions[option] = description 

    def __init__(self): 
     super(GUI, self).__init__() 
     dirname = os.path.dirname(os.path.abspath(__file__)) 
     uic.loadUi(os.path.join(dirname,'main.ui'), self) 
     self.accepted.connect(self.read_value) 
     self.lwOptions.addItems(self.listOptions) 
     self.lbDescription.setText(self.dicDescriptions[self.listOptions[0]]) 
     self.lwOptions.itemSelectionChanged.connect(self.update_description) 

    def update_description(self): 
     currentItem = self.lwOptions.currentItem().text() 
     self.lbDescription.setText(self.dicDescriptions[currentItem]) 

    def read_value(self): 
     currentItem = self.lwOptions.currentItem().text() 
     QMessageBox.information(self, "Selection", "You've selected: " + currentItem) 

if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    window = GUI() 
    window.show() 
    sys.exit(app.exec_()) 
+0

신속하고 유용한 답변을 보내 주셔서 감사합니다. –