2017-05-24 19 views
1

私はまだPythonにかなり新しく、私が書いているアプリケーションは、ウィンドウを開いたままにして、OKを選択したときにラベルのテキストを変更したいと思っています。テキストは設定ファイルに格納されますが、これは問題ではありません。私はそれをリストまたは辞書に持ち込むことができます。ボタンが押されたときにテキストをどのように循環させるかわかりません。私は最初のテキストと最後のテキストを得ることができます。私はこれを達成するための最良のプロセスやロジックを失ったばかりです。PyQtと動的ラベル

私はこのアプリケーションをtkinterとして作成しましたが、そこにこの機能を実装することはできませんでした。私はPyQtを使用しています。制限が少ないからです。あなたが続くことができる最も簡単な方法は、単にのQPushButtonは、あなたがあなたの行動を行うと、それがすべてだ機能とのクリックを接続することです

import configparser 
from PyQt5.QtCore import * 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import * 
import sys 
import random 

appGlobal = {'dialogCount':0} 
class GameDialog(QDialog): 
    def __init__(self): 
     QDialog.__init__(self) 
     layout = QGridLayout(self) 
     lblWBS = QLabel("lblWBS") 
     lblDialog = QLabel("lblDialog") 
     btnOK = QPushButton("OK") 
     layout.addWidget(btnOK, 5, 1) 

     lblDialog = QLabel() 

     layout.addWidget(lblWBS, 0, 1) 
     layout.addWidget(lblDialog, 1, 1) 

     def npcDialog(): 
      lblDialog.setText(message[appGlobal['dialogCount']]) 
      layout.removeWidget(lblDialog) 
      layout.addWidget(lblDialog, 1, 1) 
      appGlobal['dialogCount'] =+ 1 
     npcDialog() 
     btnOK.clicked.connect(npcDialog) 
     self.setWindowTitle("PALCDMS") 

def kickoffMeeting(): 
    kickoff_meeting = config['kickoffDialog'] 
    global message 
    message = [] 
    for name in kickoff_meeting: 

     string_value = config.get('kickoffDialog', name) 
     message.append(string_value) 

    app = QApplication(sys.argv) 
    dialog = GameDialog() 
    dialog.show() 
    app.exec_() 

kickoffMeeting() 
+0

configparserを使って 'config ['kickoffDialog']' – eyllanesc

+0

とすると、表示されるテキストを含む 'kickoff'というセクションがconfig(textfile)にあります。 – cybermohr

答えて

-1

のコードは次のようになります。私は可能な限り単純な例を得て、これを見て、意味があるかどうかを見てみましょう。

import sys 

from PyQt5.QtWidgets import QApplication 
from PyQt5.QtWidgets import QHBoxLayout 
from PyQt5.QtWidgets import QLabel 
from PyQt5.QtWidgets import QPushButton 

import random 


class Label(QLabel): 

    def __init__(self): 
     super(Label, self).__init__() 

     self.letters = ['q','w','e','r','t','y'] 

     self.h_layout = QHBoxLayout() 
     self.setLayout(self.h_layout) 

     self.label = QLabel('Random letters: _') 
     self.btn = QPushButton("Roll") 
     self.btn.clicked.connect(self.change_label) 

     self.h_layout.addWidget(self.label) 

     self.h_layout.addWidget(self.btn) 

    def change_label(self): 
     if len(self.letters)>0: 
      self.label.setText(self.letters.pop(0)) 




if __name__=="__main__": 
    app = QApplication(sys.argv) 
    main_label = Label() 
    main_label.show() 
    sys.exit(app.exec_()) 

あなたの最大の問題は、インデントです。あなたがPythonでどのように新しいのか分かりませんが、投稿したコードにはかなり奇妙なインデントがあるようです。私はあなたのロジックを理解するためにいくつかの問題がありました。

+0

申し訳ありませんが、私はおそらくスタックのオーバーフローにコードをもたらすインデントを台無しにしました。確認してみるよ。ありがとうございました。 – cybermohr

+0

もし正しく動作しないのなら、あなたが尋ねたと思うことをしようとしたコードを使って試してみてください。どうすればそれがあなたの例に適用できるかを見てください) – yurisnm

+0

私はこれを私のコードに適用しました。私はそのリストをランダムにせずにどのように動かすのですか?リストを最後から最後まで循環させたい – cybermohr

関連する問題