2013-06-29 5 views
0

Я делаю простой графический интерфейс. У меня есть две таблицы с именем call_directory и receive_directory. Я показываю значения с помощью поля со списком. Теперь я хотел бы знать, какое значение я выбрал и хотел бы сохранить это значение в переменной. Как мне это сделать?Хранить значение Combo Box в PyQt

Во-вторых, я хотел бы использовать кнопку сброса, которая установила значение поля со списком по умолчанию. Как мне это сделать?

import re 
import serial 
import sqlite3 
import os 
import csv 
import time 
from subprocess import * 
import serial.tools.list_ports 
import sys 
from PyQt4 import QtGui, QtCore 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
import threading 

global data 
con_ports=[] 
ports=[] 
dial_ports=[] 
receiving_ports=[] 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 
     self.initUI() 

    def initUI(self): 
     btn1 = QtGui.QPushButton('Proceed', self) 
     btn1.resize(btn1.sizeHint()) 
     btn1.move(460, 220) 
     btn2 = QtGui.QPushButton('Reset',self) 
     btn2.resize(btn2.sizeHint()) 
     btn2.move(5, 220) 
     self.setGeometry(300,300,550,250) 
     self.setWindowTitle('Calling Functions') 
     self.setWindowIcon(QtGui.QIcon('images.jpg')) 

     self.lbl1 = QtGui.QLabel("Dialing Number", self) 
     combo1 = QtGui.QComboBox(self) 
     conn = sqlite3.connect('database') 
     combo1.addItem('None') 
     c = conn.cursor() 
     c.execute('''select number from Calling_Directory''') 
     rows = c.fetchall() 
     for row in rows: 
      calling_number=row[0] 
      combo1.addItem(row[0]) 
      #calling_location=row[1] 
      #x=x+120 
     #conn.commit() 
     combo1.move(10, 40) 
     self.lbl1.move(10, 20) 
     self.lbl1.adjustSize() 

     self.lbl2 = QtGui.QLabel("Receiving Number", self) 
     combo2 = QtGui.QComboBox(self) 
     #conn = sqlite3.connect('database') 
     combo2.addItem('None') 
     #c = conn.cursor() 
     c.execute('''select number from Receiving_Directory''') 
     rows2 = c.fetchall() 
     for row in rows2: 
      receiving_number=row[0] 
      combo2.addItem(row[0]) 
      #calling_location=row[1] 
       #x=x+120 
     conn.commit() 
     combo2.move(150, 40) 
     self.lbl2.move(150, 20) 

     self.lbl2.adjustSize() 
     self.show() 

    def closeEvent(self,event): 
     reply=QtGui.QMessageBox.question(self,'Mesage',"Are you sure you want to quit?",QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) 
     if(reply==QtGui.QMessageBox.Yes): 
      event.accept() 
     else: 
      event.ignore() 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    ex=Example() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

ответ

0

Вот отрывок моего инициализация метода для моего примера класса, который делает то, что вы хотите.

Он демонстрирует простой способ заполнить combobox из вызова sql, а затем определить выбор пользователя из выпадающего списка.

cursor = db.cursor() # declare cursor 

    cursor.execute (""" 
     select distinct(region) 
     from mytable 
     where source = %s 
    order by region 
    """ , (mystring)) 

    result = cursor.fetchall() 

    regionlist = [row[0] for row in result] # use list comprehension to convert the tuple array into a list 

    regionlist.insert(0,"*") # prepend * to the list 

    self.ui.region.insertItems(0,regionlist) # set combobox values 

    index = self.ui.region.findText("region7"); # get the corresponding index for specified string in combobox 
    self.ui.region.setCurrentIndex(index) # preselect a combobox value by index 

    #--------------------------------------------- 
    # new style signal slot connections 
    #--------------------------------------------- 

    self.ui.region.currentIndexChanged.connect(self.regionChanged) 

Это метод, который можно добавить к классу Example, который вызывается соединением выше.

def ChangeRegion(self,index): 

    index = self.ui.region.currentIndex() # get current selection from combobox