2013-07-20 2 views
0

그래서 저는 PyQt와 함께 Python을 사용하고 있습니다. 매우 이상한 문제가 있습니다. 한 줄에 OK를 인쇄하는 문자열은 몇 줄의 코드 뒤에는 인쇄되지 않습니다! 내가 무엇을 얻을Python과 PyQt 문자열은 인쇄 할 수 없습니다.

name = str(self.lineEdit.text().toUtf8()) 
     self.let_change = Search() 
     name_no_ind = self.let_change.indentation(name) 
     print(name_no_ind) 
     name_cap = self.let_change.capital(name) 
     name_low = self.let_change.lower(name) 
     print(name_no_ind, name_cap, name_low) 
     col = self.combobox.currentIndex() 
     row = 0 
     for i in range(0, self.tableWidget.rowCount()): 
      try: 
       find_no_ind = self.let_change.indentation(self.tableWidget.item(row, col).text()) 
       find_cap = self.let_change.capital(self.tableWidget.item(row, col).text()) 
       find_lower = self.let_change.lower(self.tableWidget.item(row, col).text()) 
       if name_no_ind or name_cap or name_low in find_no_ind or find_cap or find_lower: 
        self.tableWidget.setItemSelected(self.tableWidget.item(row, col), True) 
        print("Item found in %d, %d" % (row,col)) 
       row += 1 
      except AttributeError: 
       row += 1 

을 그리고 여기 :

Αντωνης 
('\xce\x91\xce\xbd\xcf\x84\xcf\x89\xce\xbd\xce\xb7\xcf\x82', '\xce\x91\xce\x9d\xce\xa4\xcf\x8e\xce\x9d\xce\x97\xce\xa3', '\xce\xb1\xce\xbd\xcf\x84\xcf\x8e\xce\xbd\xce\xb7\xcf\x82') 
Item found in 0, 0 

그 이상하지가 여기 내 코드는? OK를 인쇄 한 다음 인쇄하지 않습니다. 아무도 내가 뭘 할 수 있는지 아니?

PS : 여기에 기능은 다음과 같습니다

# -*- coding: utf-8 -*- 
class Search(): 
    #A function that removes indentations: 
    def indentation(self, name): 
     a = name 
     b = ["ά", "Ά", "ή", "Ή", "ώ", "Ώ", "έ", "Έ", "ύ", "Ύ", "ί", "Ί", "ό", "Ό"] 
     c = ['α', 'Α', 'η', 'Η', 'ω', 'Ω', 'ε', 'Ε', 'υ', 'Υ', 'ι', 'Ι', 'ο', 'Ο'] 
     for i in b: 
      a = a.replace(i, c[b.index(i)]) 
     return a 

    # A function that makes letters capital:  
    def capital(self, name): 
     a = name 
     greek_small = ["α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι", "κ", "λ", "μ", "ν", "ξ", "ο", "π", "ρ", "σ", "τ", "υ", "φ", "χ", "ψ", "ω", "ς"] 
     greek_capital = ["Α", "Β", "Γ", "Δ", "Ε", "Ζ", "Η", "Θ", "Ι", "Κ", "Λ", "Μ", "Ν", "Ξ", "Ο", "Π", "Ρ", "Σ", "Τ", "Υ", "Φ", "Χ", "Ψ", "Ω", "Σ"] 
     for i in greek_small: 
      a = a.replace(i, greek_capital[greek_small.index(i)]) 
     return a 
    #A function that makes letters lower:  
    def lower(self, name): 
     a = name 
     greek_small = ["α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι", "κ", "λ", "μ", "ν", "ξ", "ο", "π", "ρ", "σ", "τ", "υ", "φ", "χ", "ψ", "ω", "ς"] 
     greek_capital = ["Α", "Β", "Γ", "Δ", "Ε", "Ζ", "Η", "Θ", "Ι", "Κ", "Λ", "Μ", "Ν", "Ξ", "Ο", "Π", "Ρ", "Σ", "Τ", "Υ", "Φ", "Χ", "Ψ", "Ω", "Σ"] 
     for i in greek_capital: 
      a = a.replace(i, greek_small[greek_capital.index(i)]) 
     return a 

기본적으로는 대문자 또는 그리스어 문자를 낮추고 ...

해결! : 스티브는 초기 문제를 해결하고 기반으로 무엇을 그가 말하길, 나는 이것으로 모든 것을 해결했습니다.

name = str(self.lineEdit.text().toUtf8()) 
     self.let_change = Search() 
     name_no_ind = self.let_change.indentation(name) 
     name_cap = self.let_change.capital(name) 
     name_low = self.let_change.lower(name) 
     name_list = [name, name_no_ind, name_cap, name_low] 
     col = self.combobox.currentIndex() 
     row = 0 
     for i in range(0, self.tableWidget.rowCount()): 
      try: 
       item_ = str(self.tableWidget.item(row, col).text().toUtf8()) 
       find_no_ind = self.let_change.indentation(item_) 
       find_cap = self.let_change.capital(item_) 
       find_lower = self.let_change.lower(item_) 
       item_list = [find_no_ind, find_cap, find_lower] 
       for x in name_list: 
        for y in item_list: 
         if x in y: 
          self.tableWidget.setItemSelected(self.tableWidget.item(row, col), True) 
       row += 1 
      except AttributeError: 
       row += 1 

답변

1

나는 self.let_change.capital(name) 또는 self.let_change.lower(name)은 입력 매개 변수의 이름을 사용하거나 인코딩을 변경하여이를 덮어 씁니다. 당신이 그들에 대한 코드를 게시하지 않았기 때문에 나는 확신 할 수 없다.

죄송합니다. 문제가되지 않습니다. 문제는 사용자가 다르게 인쇄한다는 것입니다.

>>> print(capital(name)) 
ΑΝΤΩΝΗΣ 
>>> print(capital(name), name) 
('\xce\x91\xce\x9d\xce\xa4\xce\xa9\xce\x9d\xce\x97\xce\xa3', '\xce\x91\xce\xbd\xcf\x84\xcf\x89\xce\xbd\xce\xb7\xcf\x82') 
>>> print(capital(name)) 
ΑΝΤΩΝΗΣ 
>>> print(name, name) 
('\xce\x91\xce\xbd\xcf\x84\xcf\x89\xce\xbd\xce\xb7\xcf\x82', '\xce\x91\xce\xbd\xcf\x84\xcf\x89\xce\xbd\xce\xb7\xcf\x82') 
>>> print(name,) 
('\xce\x91\xce\xbd\xcf\x84\xcf\x89\xce\xbd\xce\xb7\xcf\x82',) 
>>> print(name) 
Αντωνης 
>>> print("%s = %s" % (name, capital(name))) 
Αντωνης = ΑΝΤΩΝΗΣ 
>>> 

따라서 별도의 인쇄 문이나 형식 문자열을 사용해야합니다.

+0

죄송합니다, 지금 추가했습니다 ... – Antoni4040

+0

당신은 맞습니다 만 그게 유일한 문제는 아닙니다 : 그 후에 (긴 시퀀스 또는 in 또는) 그것이 필요한 작업을 수행하지 않습니다. 그 안에 문자열이있는 항목 만 선택하지 않으면 모든 항목이 선택됩니다! 내가 말하고자하는 바를 이해하기를 바란다. 나는 바른 설명을하는 것을 의심한다. – Antoni4040

+0

기본적으로 또는를 제거한다. 괄호 없이는 나쁜 소식이며, 단지 셀에서 값을 얻는다. (val처럼 (self.greek_capitials의 val [0] 또는 self.greek_lower의 val [0])을 검사하여 선행 공백을 없애려면 strip을 사용하십시오. 함수 당 복사 - 문자열로 처리해야 시작할 때 문자열이 있다는 것을 알기 만하면됩니다. BTW 이것은 별도의 문제이며 그것을 해결하지 못하면 새로운 질문으로 제기해야합니다. –

관련 문제