def initUI(self, shape, vscale, height=600, mode='seed'): """ Initialize UI. Parameters ---------- shape : (int, int, int) Shape of data matrix. vscale : (float, float, float) Voxel scaling. height : int Maximal slice height in pixels. mode : str Editor mode. """ self.slab = {} # picture grid = height / float(shape[1] * vscale[1]) mgrid = (grid * vscale[0], grid * vscale[1]) self.slice_box = SliceBox(shape[:-1], mgrid, mode) self.slice_box.setScrollFun(self.scrollSlices) self.connect(self.slice_box, SIGNAL('focus_slider'), self.focusSliceSlider) # sliders self.allow_select_slice = True self.n_slices = shape[2] self.slider = QSlider(Qt.Vertical) self.slider.valueChanged.connect(self.sliderSelectSlice) self.slider.label = QLabel() self.slider.setRange(1, self.n_slices) self.slider_cw = {} self.slider_cw['c'] = QSlider(Qt.Horizontal) self.slider_cw['c'].valueChanged.connect(self.changeC) self.slider_cw['c'].label = QLabel() self.slider_cw['w'] = QSlider(Qt.Horizontal) self.slider_cw['w'].valueChanged.connect(self.changeW) self.slider_cw['w'].label = QLabel() self.view_label = QLabel('View size: %d x %d' % self.img_aview.shape[:-1]) self.voxel_label = QLabel('Voxel size [mm]:\n %.2f x %.2f x %.2f'\ % tuple(self.voxel_size[np.array(self.act_transposition)])) # combo_view_options = VIEW_TABLE.keys() # combo_view = QComboBox(self) # combo_view.activated[str].connect(self.setView) # combo_view.addItems(combo_view_options) #radio button group for choosing seed class ------------------------ self.current_class = 1 self.slice_box.seed_mark = self.current_class number_group = QGroupBox(QString('Class markers')) vbox_NG = QVBoxLayout() r1 = QRadioButton('class 1') r1.setStyleSheet('QRadioButton {color: red}') r1.setChecked(True) r2 = QRadioButton('class 2') r2.setStyleSheet('QRadioButton {color: green}') r3 = QRadioButton('class 3') r3.setStyleSheet('QRadioButton {color: blue}') r4 = QRadioButton('class 4') r4.setStyleSheet('QRadioButton {color: cyan}') r5 = QRadioButton('class 5') r5.setStyleSheet('QRadioButton {color: magenta}') vbox_NG.addWidget(r1) vbox_NG.addWidget(r2) vbox_NG.addWidget(r3) vbox_NG.addWidget(r4) vbox_NG.addWidget(r5) number_group.setLayout(vbox_NG) self.button_group = QButtonGroup() self.button_group.addButton(r1, 1) self.button_group.addButton(r2, 2) self.button_group.addButton(r3, 3) self.button_group.addButton(r4, 4) self.button_group.addButton(r5, 5) self.connect(self.button_group, SIGNAL("buttonClicked(int)"), self.change_seed_class) #------------------------------------------------------------------- # buttons # btn_save = QPushButton('Save', self) # btn_save.clicked.connect(self.save) btn_quit = QPushButton("Quit", self) btn_quit.clicked.connect(self.quit) # btn_crop = QPushButton('Crop', self) # btn_crop.clicked.connect(self.crop) combo_dmask = QComboBox(self) combo_dmask.activated.connect(self.changeMask) self.mask_points_tab, aux = self.init_draw_mask(DRAW_MASK, mgrid) for icon, label in aux: combo_dmask.addItem(icon, label) self.slice_box.setMaskPoints( self.mask_points_tab[combo_dmask.currentIndex()]) self.status_bar = QStatusBar() vopts = [] vmenu = [] appmenu = [] # btn_recalc = QPushButton("Recalculate", self) # btn_recalc.clicked.connect(self.recalculate) # appmenu.append(QLabel('<b>Segmentation mode</b><br><br><br>' + # 'Select the region of interest<br>' + # 'using the mouse buttons.<br><br>')) # appmenu.append(btn_recalc) # appmenu.append(QLabel()) # self.volume_label = QLabel('Volume [mm3]:\n unknown') # appmenu.append(self.volume_label) # btn_crop = QPushButton("Crop", self) # btn_crop.clicked.connect(self.crop) # appmenu.append(btn_crop) btn_save = QPushButton("Save Seeds", self) btn_save.clicked.connect(self.saveSeeds) appmenu.append(btn_save) btn_del = QPushButton("Delete Seeds", self) btn_del.clicked.connect(self.deleteSliceSeeds) appmenu.append(btn_del) # combo_contour_options = ['fill', 'contours', 'off'] # combo_contour = QComboBox(self) # combo_contour.activated[str].connect(self.changeContourMode) # combo_contour.addItems(combo_contour_options) # self.changeContourMode(combo_contour_options[combo_contour.currentIndex()]) # vopts.append(QLabel('Selection mode:')) # vopts.append(combo_contour) # btn_reset = QPushButton("Reset Seeds", self) # btn_reset.clicked.connect(self.resetSliceDraw) # # appmenu.append(None) # appmenu.append(btn_reset) hbox = QHBoxLayout() vbox = QVBoxLayout() vbox_left = QVBoxLayout() vbox_app = QVBoxLayout() hbox.addWidget(self.slice_box) hbox.addWidget(self.slider) vbox_left.addWidget(self.slider.label) vbox_left.addWidget(self.view_label) vbox_left.addWidget(self.voxel_label) # vbox_left.addWidget(QLabel()) # vbox_left.addWidget(QLabel('View plane:')) # vbox_left.addWidget(combo_view) vbox_left.addWidget(self.get_line()) vbox_left.addWidget(self.slider_cw['c'].label) vbox_left.addWidget(self.slider_cw['c']) vbox_left.addWidget(self.slider_cw['w'].label) vbox_left.addWidget(self.slider_cw['w']) vbox_left.addWidget(self.get_line()) vbox_left.addWidget(QLabel('Drawing mask:')) vbox_left.addWidget(combo_dmask) for ii in vopts: vbox_left.addWidget(ii) for ii in vmenu: if ii is None: vbox_left.addStretch(1) else: vbox_left.addWidget(ii) for ii in appmenu: if ii is None: vbox_app.addStretch(1) else: vbox_app.addWidget(ii) vbox_left.addWidget(self.get_line()) vbox_left.addWidget(number_group) # vbox_app.addWidget(btn_crop) vbox_app.addStretch(1) # vbox_app.addWidget(btn_save) vbox_app.addWidget(btn_quit) hbox.addLayout(vbox_left) hbox.addWidget(self.get_line('v')) hbox.addLayout(vbox_app) vbox.addLayout(hbox) vbox.addWidget(self.status_bar) self.setLayout(vbox) self.setWindowTitle('Seed Editor') self.show()
def initUI(self, shape, vscale, height=600, mode='seed'): """ Initialize UI. Parameters ---------- shape : (int, int, int) Shape of data matrix. vscale : (float, float, float) Voxel scaling. height : int Maximal slice height in pixels. mode : str Editor mode. """ self.slab = {} # picture grid = height / float(shape[1] * vscale[1]) mgrid = (grid * vscale[0], grid * vscale[1]) self.slice_box = SliceBox(shape[:-1], mgrid, mode) self.slice_box.setScrollFun(self.scrollSlices) self.connect(self.slice_box, SIGNAL('focus_slider'), self.focusSliceSlider) # sliders self.allow_select_slice = True self.n_slices = shape[2] self.slider = QSlider(Qt.Vertical) self.slider.valueChanged.connect(self.sliderSelectSlice) self.slider.label = QLabel() self.slider.setRange(1, self.n_slices) self.slider_cw = {} self.slider_cw['c'] = QSlider(Qt.Horizontal) self.slider_cw['c'].valueChanged.connect(self.changeC) self.slider_cw['c'].label = QLabel() self.slider_cw['w'] = QSlider(Qt.Horizontal) self.slider_cw['w'].valueChanged.connect(self.changeW) self.slider_cw['w'].label = QLabel() self.view_label = QLabel('View size: %d x %d' % self.img_aview.shape[:-1]) self.voxel_label = QLabel('Voxel size [mm]:\n %.2f x %.2f x %.2f'\ % tuple(self.voxel_size[np.array(self.act_transposition)])) combo_view_options = VIEW_TABLE.keys() combo_view = QComboBox(self) combo_view.activated[str].connect(self.setView) combo_view.addItems(combo_view_options) #radio button group for choosing seed class ------------------------ self.current_class = 1 self.slice_box.seed_mark = self.current_class number_group = QGroupBox(QString('Class markers')) vbox_NG = QVBoxLayout() r1 = QRadioButton('class 1') r1.setStyleSheet('QRadioButton {color: red}') r1.setChecked(True) r2 = QRadioButton('class 2') r2.setStyleSheet('QRadioButton {color: green}') r3 = QRadioButton('class 3') r3.setStyleSheet('QRadioButton {color: blue}') r4 = QRadioButton('class 4') r4.setStyleSheet('QRadioButton {color: cyan}') r5 = QRadioButton('class 5') r5.setStyleSheet('QRadioButton {color: magenta}') vbox_NG.addWidget(r1) vbox_NG.addWidget(r2) vbox_NG.addWidget(r3) vbox_NG.addWidget(r4) vbox_NG.addWidget(r5) number_group.setLayout(vbox_NG) self.button_group = QButtonGroup() self.button_group.addButton(r1, 1) self.button_group.addButton(r2, 2) self.button_group.addButton(r3, 3) self.button_group.addButton(r4, 4) self.button_group.addButton(r5, 5) self.connect(self.button_group, SIGNAL("buttonClicked(int)"), self.change_seed_class) #------------------------------------------------------------------- # buttons # btn_save = QPushButton('Save', self) # btn_save.clicked.connect(self.save) btn_quit = QPushButton("Quit", self) btn_quit.clicked.connect(self.quit) # btn_crop = QPushButton('Crop', self) # btn_crop.clicked.connect(self.crop) combo_dmask = QComboBox(self) combo_dmask.activated.connect(self.changeMask) self.mask_points_tab, aux = self.init_draw_mask(DRAW_MASK, mgrid) for icon, label in aux: combo_dmask.addItem(icon, label) self.slice_box.setMaskPoints(self.mask_points_tab[combo_dmask.currentIndex()]) self.status_bar = QStatusBar() vopts = [] vmenu = [] appmenu = [] if mode == 'seed': btn_recalc = QPushButton("Recalculate", self) btn_recalc.clicked.connect(self.recalculate) appmenu.append(QLabel('<b>Segmentation mode</b><br><br><br>' + 'Select the region of interest<br>' + 'using the mouse buttons.<br><br>')) appmenu.append(btn_recalc) appmenu.append(QLabel()) self.volume_label = QLabel('Volume [mm3]:\n unknown') appmenu.append(self.volume_label) if mode == 'seed' or mode == 'crop': btn_del = QPushButton("Delete Seeds", self) btn_del.clicked.connect(self.deleteSliceSeeds) vmenu.append(None) vmenu.append(btn_del) combo_contour_options = ['fill', 'contours', 'off'] combo_contour = QComboBox(self) combo_contour.activated[str].connect(self.changeContourMode) combo_contour.addItems(combo_contour_options) self.changeContourMode(combo_contour_options[combo_contour.currentIndex()]) vopts.append(QLabel('Selection mode:')) vopts.append(combo_contour) if mode == 'crop': btn_crop = QPushButton("Crop", self) btn_crop.clicked.connect(self.crop) appmenu.append(QLabel('<b>Crop mode</b><br><br><br>' + 'Select the crop region<br>' + 'using the left mouse button<br><br>')) appmenu.append(btn_crop) # if mode == 'draw': # appmenu.append(QLabel('<b>Manual segmentation<br> mode</b><br><br><br>' + # 'Mark the region of interest<br>' + # 'using the mouse buttons:<br><br>' + # ' <i>left</i> - draw<br>' + # ' <i>right</i> - erase<br>' + # ' <i>middle</i> - vol. erase<br><br>')) # # btn_reset = QPushButton("Reset", self) # btn_reset.clicked.connect(self.resetSliceDraw) # vmenu.append(None) # vmenu.append(btn_reset) # # combo_erase_options = ['inside', 'outside'] # combo_erase = QComboBox(self) # combo_erase.activated[str].connect(self.changeEraseMode) # combo_erase.addItems(combo_erase_options) # self.changeEraseMode(combo_erase_options[combo_erase.currentIndex()]) # vopts.append(QLabel('Volume erase mode:')) # vopts.append(combo_erase) hbox = QHBoxLayout() vbox = QVBoxLayout() vbox_left = QVBoxLayout() vbox_app = QVBoxLayout() hbox.addWidget(self.slice_box) hbox.addWidget(self.slider) vbox_left.addWidget(self.slider.label) vbox_left.addWidget(self.view_label) vbox_left.addWidget(self.voxel_label) vbox_left.addWidget(QLabel()) vbox_left.addWidget(QLabel('View plane:')) vbox_left.addWidget(combo_view) vbox_left.addWidget(self.get_line()) vbox_left.addWidget(self.slider_cw['c'].label) vbox_left.addWidget(self.slider_cw['c']) vbox_left.addWidget(self.slider_cw['w'].label) vbox_left.addWidget(self.slider_cw['w']) vbox_left.addWidget(self.get_line()) vbox_left.addWidget(QLabel('Drawing mask:')) vbox_left.addWidget(combo_dmask) for ii in vopts: vbox_left.addWidget(ii) for ii in vmenu: if ii is None: vbox_left.addStretch(1) else: vbox_left.addWidget(ii) for ii in appmenu: if ii is None: vbox_app.addStretch(1) else: vbox_app.addWidget(ii) vbox_left.addWidget(self.get_line()) vbox_left.addWidget(number_group) # vbox_app.addWidget(btn_crop) vbox_app.addStretch(1) # vbox_app.addWidget(btn_save) vbox_app.addWidget(btn_quit) hbox.addLayout(vbox_left) hbox.addWidget(self.get_line('v')) hbox.addLayout(vbox_app) vbox.addLayout(hbox) vbox.addWidget(self.status_bar) self.setLayout(vbox) self.setWindowTitle('Segmentation Editor') self.show()
class typicalWindow(QtGui.QMainWindow): def __init__(self): QtGui.QMainWindow.__init__(self) #window self.setWindowTitle(winTitle) self.central_widget=QWidget(self) self.setCentralWidget(self.central_widget) self.masterLayout=QGridLayout(self.central_widget) self.masterLayout.setAlignment(QtCore.Qt.AlignTop) #mainlayout self.vertical_order_layout=QtGui.QBoxLayout(2) self.vertical_order_layout.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignVCenter) self.masterLayout.addLayout(self.vertical_order_layout, 0,0,1,1) self.topDivideLayout=QGridLayout() self.botDivideLayout=QGridLayout() self.upper_layout=QGridLayout() self.topDivideLayout.addLayout(self.upper_layout, 0,0,1,1) self.lower_layout=QGridLayout() self.lower_layout.setAlignment(QtCore.Qt.AlignTop) self.botDivideLayout.addLayout(self.lower_layout, 0,0,1,1) self.midLayout=QGridLayout() self.midLayout.setAlignment(QtCore.Qt.AlignTop) self.base_layout=QGridLayout() self.base_layout.setAlignment(QtCore.Qt.AlignTop) self.botDivideLayout.addLayout(self.base_layout, 4,0,1,1) sshFile=open(os.path.join(__location__, styleSheetFile+".stylesheet"), 'r') self.styleData=sshFile.read() sshFile.close self.setStyleSheet(self.styleData) self.top=QtGui.QFrame(self) self.top.setFrameShape(QtGui.QFrame.StyledPanel) self.top.setLayout(self.topDivideLayout) self.bottom=QtGui.QFrame(self) self.bottom.setFrameShape(QtGui.QFrame.StyledPanel) self.bottom.setLayout(self.botDivideLayout) self.splitPlane=QtGui.QSplitter(QtCore.Qt.Vertical) self.splitPlane.addWidget(self.top) self.splitPlane.addWidget(self.bottom) self.splitPlane.setSizes([650, 650]) self.vertical_order_layout.addWidget(self.splitPlane) #layouts self.window_layer_00=QGridLayout() self.upper_layout.addLayout(self.window_layer_00, 0,0,1,1) self.window_layer_01=QGridLayout() self.upper_layout.addLayout(self.window_layer_01,1,0,1,1) self.window_layer_02=QGridLayout() self.upper_layout.addLayout(self.window_layer_02, 2,0,1,1) self.window_layer_03=QGridLayout() self.upper_layout.addLayout(self.window_layer_03,3,0,1,1) self.window_layer_04=QGridLayout() self.upper_layout.addLayout(self.window_layer_04, 4,0,1,1) self.window_layer_05=QGridLayout() self.upper_layout.addLayout(self.window_layer_05,5,0,1,1) self.window_layer_06=QGridLayout() self.midLayout.addLayout(self.window_layer_06, 6,0,1,1) self.frame_layout=QGridLayout() self.frame_layout.setAlignment(QtCore.Qt.AlignTop) self.lower_layout.addLayout(self.frame_layout, 0,0,1,1) self.frameWidget=QtGui.QGridLayout() self.frameWidget.setContentsMargins(5,10,5,10) self.frameOverride=QtGui.QFrame() self.frameOverride.setStyleSheet("background-color: #434343; border-style: solid; border-width: 2px; border-color:#434343;border-radius:8px;") self.frameOverride.setFixedHeight(100) self.frame_layout.addLayout(self.frameWidget, 0,0,1,1) self.frame_layout.addWidget(self.frameOverride, 0,0,1,1) self.frame_title_layout=QGridLayout() self.frameWidget.addLayout(self.frame_title_layout, 0,0,1,1) self.frame_radio_layout=QGridLayout() self.frameWidget.addLayout(self.frame_radio_layout, 1,0,1,1) self.frame_btn_layout=QGridLayout() self.frameWidget.addLayout(self.frame_btn_layout, 2,0,1,1) self.btm_btn_layout=QtGui.QGridLayout() self.btm_btn_layout.setAlignment(QtCore.Qt.AlignTop) self.btm_btn_layout.setContentsMargins(5,10,5,10) self.wbFrame=QtGui.QFrame() self.wbFrame.setStyleSheet("background-color: #434343; border-style: solid; border-width: 2px; border-color:#434343;border-radius:8px;") self.btm_over_layout=QtGui.QGridLayout() self.btm_over_layout.setAlignment(QtCore.Qt.AlignTop) self.btm_over_layout.addLayout(self.btm_btn_layout, 0,0,1,1) self.btm_over_layout.addWidget(self.wbFrame, 0,0,1,1) self.pkt_layout= QGridLayout() self.pkt_layout.setAlignment(QtCore.Qt.AlignTop) self.pkt_widget=QGridLayout() self.pkt_widget.setContentsMargins(5,5,5,5) self.pkt_frame=QFrame() self.pkt_frame.setMinimumWidth(650) self.pkt_frame.setStyleSheet("background-color: #434343; border-style: solid; border-width: 2px; border-color:#434343;border-radius:8px;") self.base_layout.addLayout(self.pkt_layout, 0,0,1,1) self.wndw_layer_pkt=QtGui.QGridLayout() self.wndw_layer_pkt.setAlignment(QtCore.Qt.AlignTop) self.pkt_widget.addLayout(self.wndw_layer_pkt, 0,0,1,1) self.park_btn_pkt=QtGui.QBoxLayout(2) self.park_btn_pkt.setAlignment(QtCore.Qt.AlignTop) self.park_btn_pkt.setContentsMargins(5,2,5,8) self.wndw_layer_pkt.addLayout(self.park_btn_pkt, 0,0,1,1) self.park_frame=QtGui.QFrame() self.park_frame.setStyleSheet("background-color: #434343; border-style: solid; border-width: 2px; border-color:#434343;border-radius:8px;") #widgets self.drop_lbl_01=QLabel() self.drop_lbl_01.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self.drop_lbl_01.setStyleSheet("color: #b1b1b1; background-color: rgba(255,255,255,0);") self.window_layer_01.addWidget(self.drop_lbl_01, 0,0,1,1) self.drop_01=QComboBox() self.window_layer_01.addWidget(self.drop_01, 0,1,1,1) QtCore.QObject.connect(self.drop_01, SIGNAL("currentIndexChanged(QString)"), self.on_drop_01_changed) self.drop_01.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.connect(self.drop_lbl_01, SIGNAL("customContextMenuRequested(QPoint)"), self.onRightClick) self.drop_lbl_02=QLabel() self.drop_lbl_02.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self.drop_lbl_02.setStyleSheet("color: #b1b1b1; background-color: rgba(255,255,255,0);") self.window_layer_01.addWidget(self.drop_lbl_02, 0,2,1,1) self.drop_02=QComboBox() self.window_layer_01.addWidget(self.drop_02, 0,3,1,1) QtCore.QObject.connect(self.drop_02, SIGNAL("currentIndexChanged(QString)"), self.on_drop_01_changed) self.drop_02.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.connect(self.drop_lbl_01, SIGNAL("customContextMenuRequested(QPoint)"), self.onRightClick) self.button_01=QPushButton("Set") self.button_01.setToolTip("set") self.connect(self.button_01, SIGNAL('clicked()'), self.connectButton01) self.window_layer_01.addWidget(self.button_01, 0,4,1,1) self.button_02=QPushButton("Set2") self.button_02.setToolTip("set2") self.connect(self.button_02, SIGNAL('clicked()'), self.connectButton01) self.window_layer_01.addWidget(self.button_02, 0,5,1,1) self.drop_lbl_03=QLabel() self.drop_lbl_03.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self.drop_lbl_03.setStyleSheet("color: #b1b1b1; background-color: rgba(255,255,255,0);") self.window_layer_02.addWidget(self.drop_lbl_03, 0,0,1,1) self.drop_03=QComboBox() self.window_layer_02.addWidget(self.drop_03, 0,1,1,1) QtCore.QObject.connect(self.drop_03, SIGNAL("currentIndexChanged(QString)"), self.on_drop_01_changed) self.drop_03.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.connect(self.drop_03, SIGNAL("customContextMenuRequested(QPoint)"), self.onRightClick) self.button_03=QPushButton("button_03") self.button_03.setToolTip("button_03") self.connect(self.button_03, SIGNAL('clicked()'), self.connectButton01) self.window_layer_02.addWidget(self.button_03, 0,2,1,1) self.button_04=QPushButton("button_04") self.button_04.setToolTip("button_04") self.connect(self.button_04, SIGNAL('clicked()'), self.connectButton01) self.window_layer_02.addWidget(self.button_04, 0,3,1,1) self.button_05=QPushButton("button_05") self.button_05.setToolTip("button_05") self.connect(self.button_05, SIGNAL('clicked()'), self.connectButton01) self.window_layer_02.addWidget(self.button_05, 0,4,1,1) self.drop_04=QComboBox() self.window_layer_04.addWidget(self.drop_04, 0,2,1,1) QtCore.QObject.connect(self.drop_04, SIGNAL("currentIndexChanged(QString)"), self.on_drop_01_changed) self.drop_04.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.connect(self.drop_04, SIGNAL("customContextMenuRequested(QPoint)"), self.onRightClick) self.list_frame=QFrame() self.list_frame.setStyleSheet("color: rgb"+str(buttonColoursDict.get("red"))) self.list_layout=QHBoxLayout() self.list_frame.setLayout(self.list_layout) self.drop_list_builder_05=QComboBox() self.drop_list_builder_05.addItems(alist) QtCore.QObject.connect(self.drop_list_builder_05, SIGNAL("currentIndexChanged(QString)"), self.build) self.drop_list_builder_05.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.connect(self.drop_list_builder_05, SIGNAL("customContextMenuRequested(QPoint)"), self.onRightClick) self.list_layout.addWidget(self.drop_list_builder_05) self.window_layer_04.addWidget(self.list_frame, 0,3,1,1) self.drop_list_06=QComboBox() QtCore.QObject.connect(self.drop_list_06, SIGNAL("currentIndexChanged(QString)"), self.load) self.drop_list_06.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.connect(self.drop_list_06, SIGNAL("customContextMenuRequested(QPoint)"), self.onRightClick) if len(pres)<1: self.drop_list_06.setEnabled(0) else: self.drop_list_06.setEnabled(1) self.drop_list_06.addItems(alist2) self.list_layout.addWidget(self.drop_list_06) self.type_list_drop=QComboBox() self.type_list_drop.addItems(typesOfStuffInList) QtCore.QObject.connect(self.type_list_drop, SIGNAL("currentIndexChanged(QString)"), self.on_drop_01_changed) self.window_layer_04.addWidget(self.type_list_drop, 0,5,1,1) self.button_06=QPushButton("button_06") self.button_06.setToolTip("button_06") self.connect(self.button_06, SIGNAL('clicked()'), self.connectButton01) self.window_layer_04.addWidget(self.button_06, 0,6,0,1) self.listWidg=QtGui.QTableWidget() self.listWidg.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.listWidg.customContextMenuRequested.connect(self.RightClick) self.connect(self.listWidg, SIGNAL("itemClicked(QTableWidgetItem *)"), self.clicked) self.connect(self.listWidg, SIGNAL("itemDoubleClicked(QTableWidgetItem *)"), self.dclicked) self.window_layer_05.addWidget(self.listWidg, 0,2,1,1) self.status_lbl=QLabel() self.status_lbl.setStyleSheet('background-color:transparent') self.status_lbl.setAlignment(QtCore.Qt.AlignCenter|QtCore.Qt.AlignVCenter) self.frame_title_layout.addWidget(self.status_lbl, 0,2,1,1) self.spaceHold=QLabel() self.spaceHold.setStyleSheet("color: #b1b1b1; background-color: rgba(255,255,255,0);") self.spaceHold.setAlignment(QtCore.Qt.AlignCenter|QtCore.Qt.AlignVCenter) self.frame_title_layout.addWidget(self.spaceHold, 0,0,1,1) self.checkbox=QCheckBox("add") self.checkbox.setStyleSheet("color: #b1b1b1; background-color: rgba(255,255,255,0);") self.checkbox.setContentsMargins(5,0,0,0) self.checkbox.setChecked(1) self.frame_title_layout.addWidget(self.checkbox, 0,1,1,1) self.radiobox=QGridLayout() self.radio=QRadioButton("radio") self.radio.setStyleSheet("color: #b1b1b1; background-color: rgba(255,255,255,0);") self.radio.setChecked(1) self.radiobox.addWidget(self.radio, 0,0,1,1) self.newradio=QRadioButton("newradio") self.newradio.setStyleSheet("color: #b1b1b1; background-color: rgba(255,255,255,0);") self.radiobox.addWidget(self.newradio, 0,1,1,1) self.frame_len_layout=QGridLayout() self.frame_len_layout.setAlignment(QtCore.Qt.AlignCenter|QtCore.Qt.AlignVCenter) #self.frame_title_layout.addWidget(self.frame_len_layout, 1,3,1,1) self.spaceHold=QLabel() self.spaceHold.setStyleSheet("color: #b1b1b1; background-color: rgba(255,255,255,0);") self.spaceHold.setAlignment(QtCore.Qt.AlignCenter|QtCore.Qt.AlignVCenter) self.frame_title_layout.addWidget(self.spaceHold, 0,0,1,1) self.over=QRadioButton("over") self.over.setStyleSheet("color: #b1b1b1; background-color: rgba(255,255,255,0);") self.radiobox.addWidget(self.over, 1,1,1,1) self.head_lbl=QLabel("from") self.head_lbl.setStyleSheet("color: #b1b1b1; background-color: rgba(255,255,255,0);") self.radiobox.addWidget(self.head_lbl, 1, 4,1,1) self.head_field=QTextEdit("") self.head_field.setStyleSheet("color: #b1b1b1; background-color: rgba(255,255,255,0);") self.radiobox.addWidget(self.head_field, 1, 5,1,1) self.toe_lbl=QLabel("til") self.toe_lbl.setStyleSheet("color: #b1b1b1; background-color: rgba(255,255,255,0);") self.radiobox.addWidget(self.toe_lbl, 1, 6,1,1) self.toe_field=QTextEdit("") self.toe_field.setStyleSheet("color: #b1b1b1; background-color: rgba(255,255,255,0);") self.radiobox.addWidget(self.toe_field, 1, 7,1,1) self.fieldBox=QLineEdit() self.fieldBox.setVisible(0) self.fieldBox.setText(defaultText) self.go_btn=QPushButton("go") self.connect(self.go_btn, SIGNAL('clicked()'), self.go) self.frame_btn_layout.addWidget(self.go_btn, 0,0,0,1) self.look_btn=QPushButton("look") self.connect(self.look_btn, SIGNAL('clicked()'), self.go) self.frame_btn_layout.addWidget(self.look_btn, 0,1, 0,1) self.link_btn=QPushButton("link") self.connect(self.link_btn, SIGNAL('clicked()'), self.go) self.frame_btn_layout.addWidget(self.link_btn, 0,2,1,1) self.create_btn=QPushButton("create_btn") self.connect(self.create_btn, SIGNAL('clicked()'), self.go) self.frame_btn_layout.addWidget(self.create_btn, 0,3, 1,1) self.pocketTitle=QPushButton("title") self.pocketTitle.setObjectName('label') self.pocketTitle.setStyleSheet("QPushButton#label{font-weight:500; color: rgb"str(buttonColorDict).get("yello"))+"; button-color: rgba(255,255,255,0); font-size: 10pt; border-width: 0px; font-style: bold;}") self.connect(self.pocketTitle, SIGNAL('clicked()'), self.send) self.connect(self.pocketTitle, SIGNAL('customContextMenuRequested(QPoint)'), lambda: self.send()) self.park_btn_pkt.addWidget(self.pocketTitle) self.a_btn=QPushButton("a_btn") self.a_btn.setStyleSheet("background-color: rgb"str(buttonColorDict).get("yello"))) self.connect(self.a_btn, SIGNAL('clicked()'), self.go) self.park_btn_pkt.addWidget(self.a_btn) self.card_menu=QMenu("card") self.card_menuBar=self.menuBar() self.card_menuBar.addMenu(self.card_menu) self.park_btn_pkt.addWidget(self.card_menuBar) buttonGrp.append(self.card_menuBar) self.card_btn=QToolButton() self.card_btn.setPopupMode(QToolButton.MenuButtonPopup) self.card_btn.setMenu(self.card_menu) self.card_special_btn=QPushButton("card special") self.connect(self.card_special_btn, SIGNAL('clicked()'), self.card_special_callup) action=QtGui.QWidgetAction(self.card_btn) action.setDefaultWidget(self.card_special_btn) self.card_btn.menu().addAction(action) self.B_card_btn=QToolButton() self.B_card_btn.setPopupMode(QToolButton.MenuButtonPopup) self.B_card_btn.setMenu(self.card_menu) self.B_card_special_btn=QPushButton("card special") self.connect(self.B_card_special_btn, SIGNAL('clicked()'),self.B_card_special_callup) action=QtGui.QWidgetAction(self.B_card_btn) action.setDefaultWidget(self.B_card_special_btn) self.B_card_btn.menu().addAction(action) def buttonToggle(self): get_a_layout=self.park_btn_pkt get_size=get_a_layout.getContentsMargine() if get_size==(0,0,0,0): self.setvisible() else: self.setinvisible() def setinvisible(self): for each in buttonGrp: each.setVisible(0) self.park_btn_pkt.setContentsMargine(0,0,0,0) def setvisible(self): for each in buttonGrp: each.setVisible(1) self.park_btn_pkt.setContentsMargine(5,8,5,8) def onRightClick(self): path='//' command="xdg-open '%s'"%path subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) def on_drop_01_changed(self): newcol1=self.listWidg.columnWidth(0) newcol2=self.listWidg.columnWidth(1) newcol3=self.listWidg.columnWidth(2) if newcol1==0: col1, col1, col1= 240, 160, 500 else: col1, col1, col1= newcol1, newcol2, newcol3 getPath='//' get_items=os.listdir(get_items) self.listWidg.clear() self.status_lbl.clear() self.drop_03.addItems(get_items) model, countdata, listArray =self.get_listStuff() if self.on_drop_01=="item1": buildListPath=pathList.get("listpathtype").replace(getUser, newUser) self.makeList(listpath, newUser, self.listWidg, model, stat_lab, listtype) elif self.on_drop_01=="item2": buildListPath=pathList.get("listpathtype2").replace(getUser, newUser) self.makeList(listpath, newUser, self.listWidg, model, stat_lab, listtype) def clicked(self): print "hi" def dclicked(self): print "hello" def get_listStuff(self): listArray=self.listWidg countdata=listArray.rowCount() model=listArray.model() return model, countdata, listArray def getListWidgetData(self): model, countdata, listArray =self.get_listStuff() dataInListWidget=[] for row in range(model.rowCount()): dataInListWidget.append([]) for column in range(model.columnCount()): index = model.index(row, column) dataInListWidet[row].append(str(model.data(index).toString())) return dataInListWidget, countdata def listCreate(self): directory='//' getUser='******' (dataInListWidget, countdata)=self.getListWidgetData() self.listWidg.setRowCount(0) self.listWidg.setColumnCount(0) try: getFiles=[os.path.join(directory, o) for o in os.listdir(directory) if os.path.isdir(os.path.join(directory, o))] pass except: print "nothing found" return getFile=[(each) for each in getFiles if getpwuid(stat(each).st_uid).pw_name==getUser] getFiles.sort(key=lambda x: os.path.getmtime(x)) fileDict=[] for each in getFiles: statbuf=os.stat(each) timeFormat=time.strftime('%m/%d/%Y', time.gmtime(os.path.getctime(each))) getAccTime=time.ctime(os.path.getmtime(each)) if " " in str(getAccTime): getAccTime=getAccTime.split(" ") getAccTime=getAccTime[1].split(" ")[1] else: getAccTime=getAccTime.split(" ")[3] timeFormat=timeFormat+" "+getAccTime makeDict=(each, timeFormat) fileDict.append(makeDict) count=len(fileDict) fileDict=reversed(fileDict) dictItems=fileDict col1, col1, col1= 240, 160, 500 headerLabels=["Name", "Date", "Path"] self.listWidg.setRowCount(count) self.listWidg.clear() self.listWidg.setSortingEnabled(True) self.listWidg.setColumnWidth(3) self.listWidg.setColumnWidth(0, col1) self.listWidg.setColumnWidth(1, col2) self.listWidg.setColumnWidth(2, col3) self.listWidg.setHorizontalHeaderLabels(headerLabels) getVerticalHeader=self.listWidg.verticalHeader() getVerticalHeader.setDefaultSelectionSize(20) self.listWidg.setSelectionBehavior(QAbstractItemView.SelectRows) self.listWidg.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.listWidg.horizontalHeaderItem(0).setTextAlignment(QtCore.Qt.AlignLeft) self.listWidg.horizontalHeaderItem(1).setTextAlignment(QtCore.Qt.AlignLeft) self.listWidg.horizontalHeaderItem(2).setTextAlignment(QtCore.Qt.AlignLeft) for row, item in enumerate(dictItems): key=item[0].split('/')[-1] path='/'.join(item[0].split('/')[-1]) path="/"+path value=item[1] getTable=self.listWidg name=QtGui.QTableWidgetItem(key) name.setFlage(QtCore.Qt.ItemIsEnabled|QtCore.Qt.ItemIsSelectable) self.listWidg.setItem(row, 0, name) timeStamp=QtGui.QTableWidgetItem(value) self.listWidg.setItem(row, 1, timeStamp) location=QtGui.QTableWidgetItem(path) self.listWidg.setItem(row, 2, location) self.status_lbl.setText(grabText) self.status_lbl.setObjectName('non_plan_label') self.status_lbl.setStyleSheet('QLabel#non_plan_label{font-weight: 500; color: orange; background-color: rgba(255,255,255,0);font-size: 9pt}') def is_listWid_item_selected(self): listW=self.listWidg (dataInListWidget, countdata)=self.getListWidgetData() get_string_id=[] for index in xrange(countdata): get=listW.item(index, 0).isSelected() if get==True: getObj=listW.item(index, 2).text() getObj=str(getObj) get_string_id.append(getObj) else: get=listW.item(index, 1).isSelected() if get==True: getObj=listW.item(index, 2).text() getObj=str(getObj) get_string_id.append(getObj) else: get=listW.item(index, 2).isSelected() if get==True: getObj=listW.item(index, 2).text() getObj=str(getObj) get_string_id.append(getObj) return get_string_id def build(self): list_build=self.drop_list_builder_05 list_build_function=list_build.currentText() selected_in_list=self.is_listWid_item_selected() allthePaths=('//', '//') allthePathsDic={"firstPath":'//', "secondPath":'//'} #drop_list_builder_05 getlisttype=self.type_list_drop listtype=getlisttype.currentText() if selected_in_list>1: getItems=[(each) for each in selected_in_list] nameToSave=' '.join(getItems) if listtype=="firstPath": suffixAppend="first" path=allthePathsDic.get("firstPath") if listtype=="secondPath": suffixAppend="second" path=allthePathsDic.get("secondPath") compareBucket=[] getitems=[(suffixAppend+":"+each.split("/")[-1]) for each in selected_in_list] name_to_save=' '.join(getitems) if list_build_function==list_build[1]: prompt="name of list:" getcomment=self.makeBody(prompt) if getComment==None: print "needs name" return else: pass getComment=getComment.replace(' ', '_') shotList=suffixAppend+"_"+getComment+"storedText.txt" fileBuild=path+shotList copyfilemessage="creating in "+fileBuild replay = QtGui.QMessageBox.question(None, 'Message' ,copyfilemessage, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: if os.path.isfile(fileBuild)==True: cmessage="create over "+fileBuild replay = QtGui.QMessageBox.question(None, 'Message', cmessage, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: inp=open(fileBuild, "w+") inp.write(name_to_save) inp.close() print "created "+fileBuild else: print "cancelled" return else: inp=open(fileBuild, "w+") inp.write(name_to_save) inp.close() print "created "+fileBuild else: print "cancelled" return elif list_build_function==list_build[2]: fileDict, list=self.getAllLists(allthePaths) def getAllLists(self, stuff): fileDict={} for each in stuff: getList, getnamesdic=self.obtain_presets(each) getnames=getnamesdic.keys() for eachp in eachn in map(None, getList, getnames): dictlist={eachn:eachp} fileDict.update(dictlist) return fileDict, getList def obtain_presets(self, morestuff): preset=False format=".txt" getpreset=[os.path.join(dirpath, name) for dirpath, dirnames, files in os.walk(morestuff) for name in files if name.lower().endswith(format)] preset=[(each) for each in getpreset if "storedText" in each] getlistnames={} for each in preset: getName=each.split("/")[-1] nam=getName.split("_") getpletename='_'.join(nam[:-1]) diction={getpletename:nam[0]} getlistnames.update(diction) return preset, getlistnames # def obtain_files(self, stuff): # preset_name=[] # if presetis!=False: # for each in presetis: # pathsplit=each.split("/")[-1] # namefind=pathsplit.split("_")[0] # preset_name.append(namefind) # else: # preset_name=False # return preset_name def makeBody(self, prompt): text, ok=QtGui.QInputDialog.getText(None, 'Intput Dialog', prompt) if ok: project=(str(text)) else: return return project def makeBodyFilled(self, prompt, message): text, ok=QtGui.QInputDialog.getText(None, 'Intput Dialog', prompt, QtGui.QLineEdit.Normal, message) if ok and text: project=(str(text)) else: return return project def load(self): list_load=self.drop_list_06 list_load_function=list_build.currentText() allthePaths=('//', '//') allthePathsDic={"firstPath":'//', "secondPath":'//'} # getlisttype=self.type_list_drop # listtype=getlisttype.currentText() # if selected_in_list>1: # getItems=[(each) for each in selected_in_list] # nameToSave=' '.join(getItems) # if listtype=="firstPath" # suffixAppend="first" # path=allthePathsDic.get("firstPath") # if listtype=="secondPath" # suffixAppend="second" # path=allthePathsDic.get("secondPath") # compareBucket=[] # getitems=[(suffixAppend+":"+each.split("/")[-1]) for each in selected_in_list] # name_to_save=' '.join(getitems) if list_load_function==presetlist[0]: prompt="name of list:" getcomment=self.makeBody(prompt) if getComment==None: print "needs name" return else: pass getComment=getComment.replace(' ', '_') shotList=suffixAppend+"_"+getComment+"storedText.txt" fileBuild=path+shotList copyfilemessage="creating in "+fileBuild replay = QtGui.QMessageBox.question(None, 'Message', copyfilemessage, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: if os.path.isfile(fileBuild)==True: cmessage="create over "+fileBuild replay = QtGui.QMessageBox.question(None, 'Message' ,cmessage, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: inp=open(fileBuild, "w+") inp.write(name_to_save) inp.close() print "created "+fileBuild else: print "cancelled" return else: inp=open(fileBuild, "w+") inp.write(name_to_save) inp.close() print "created "+fileBuild else: print "cancelled" return elif list_build_function==list_build[2]: fileDict, list=self.getAllLists(allthePaths) def reset_callup(self): allthePaths=('//', '//') allthePathsDic={"firstPath":'//', "secondPath":'//'} getlisttype=self.type_list_drop listtype=getlisttype.currentText() if listtype=="firstPath": directory=allthePathsDic.get("firstPath") getUser=getUser self.directory_for_taking(getUser, directory) def directory_for_taking(self, getUser, directory): model, countdata, listArray =self.get_listStuff() # self.status_lbl def connectButton01(self): print "hi" def RightClick(self): print "hello" def go(self): print "go" def send(self): print "end" def card_special_callup(self): print "card_special_callup" def Bcard_special_callup(self): print "B_card_special_callup" def B_card_special_callup(self): print "B_card_special_callup"
class ApplicationWindow(QMainWindow): def __init__(self): super(ApplicationWindow, self).__init__() self._init_ui() self._set_defaults() def _init_ui(self): # Styles self.setStyleSheet("""QRadioButton { max-width: 40px; }""") bold_font = QFont() bold_font.setBold(True) title_label = QLabel(self) title_label.setText("PyPass3") title_label.move(10, 0) title_label.setMinimumSize(300, 20) title_label.setFont(bold_font) length_label = QLabel(self) length_label.setText("Length") length_label.move(192, 185) length_label.setMinimumSize(200, 20) length_label.setFont(bold_font) main_label = QLabel(self) main_label.setText("Make robust secrets with random characters,\n" "words, or numbers. Or choose number of dice\n" "and rolls for words type passphrase. Defaults\n" "to 5 dice and 5 rolls.\n") main_label.setMinimumSize(280, 100) main_label.move(10, 15) type_label = QLabel(self) type_label.setText("Secret type") type_label.move(10, 87) type_label.setFont(bold_font) dice_label = QLabel(self) dice_label.setText("Number of dice") dice_label.move(10, 138) dice_label.setMinimumSize(280, 20) dice_label.setFont(bold_font) rolls_label = QLabel(self) rolls_label.setText("Number of rolls") rolls_label.move(10, 190) rolls_label.setMinimumSize(280, 20) rolls_label.setFont(bold_font) self.textbox = QTextEdit(self) self.textbox.setMinimumSize(280, 100) self.textbox.move(10, 245) self.textbox.setFontFamily("Courier New") self.length_textline = QLineEdit(self) self.length_textline.setMinimumSize(100, 20) self.length_textline.move(190, 210) min_width = 125 # max_width = 150 # Add Generate button generate_btn = QPushButton('Generate', self) generate_btn.setToolTip('Click to generate secret') # generate_btn.clicked.connect(on_click) generate_btn.clicked.connect(self._on_click) generate_btn.move(10, 355) generate_btn.setMinimumWidth(min_width) # Add Quit button quit_btn = QPushButton('Quit', self) quit_btn.setToolTip('Quit this application') quit_btn.clicked.connect(exit) quit_btn.move(165, 355) quit_btn.setMinimumWidth(min_width) # Add Copy button copy_btn = QPushButton('Copy', self) copy_btn.setToolTip('Copy your secret') copy_btn.clicked.connect(self._copy_textbox) copy_btn.move(250, 320) copy_btn.setMaximumWidth(35) copy_btn.setMaximumHeight(20) copy_btn.setStyleSheet('font-size: 11px;') # Add Help button help_btn = QPushButton('Help', self) help_btn.setToolTip('Get help about this application') help_btn.clicked.connect(self._open_help) help_btn.move(240, 80) help_btn.setMaximumWidth(35) help_btn.setMaximumHeight(20) help_btn.setStyleSheet('font-size: 11px;') hr1 = QFrame(self) hr1.setFrameShape(QFrame.HLine) hr1.move(10, 125) hr1.setMinimumWidth(280) hr1.setStyleSheet("color: #d0d0d0;") hr2 = QFrame(self) hr2.setFrameShape(QFrame.HLine) hr2.move(10, 175) hr2.setMinimumWidth(100) hr2.setStyleSheet("color: #d0d0d0;") # Add secret type radio buttons self.words_radio_btn = QRadioButton('words', self) self.words_radio_btn.move(10, 110) self.words_radio_btn.clicked.connect(self._set_word_defaults) self.words_radio_btn.setStyleSheet('max-width: 80px;') self.mixed_radio_btn = QRadioButton('mixed', self) self.mixed_radio_btn.move(90, 110) self.mixed_radio_btn.clicked.connect(self._disabled_unused) self.mixed_radio_btn.setStyleSheet('max-width: 80px;') self.numbers_radio_btn = QRadioButton('numbers', self) self.numbers_radio_btn.move(170, 110) self.numbers_radio_btn.clicked.connect(self._disabled_unused) self.numbers_radio_btn.setStyleSheet('max-width: 100px;') # Add dice roll radio buttons self.num_dice4 = QRadioButton('4', self) self.num_dice4.move(10, 160) self.num_dice5 = QRadioButton('5', self) self.num_dice5.move(60, 160) self.num_rolls3 = QRadioButton('3', self) self.num_rolls3.move(10, 212) self.num_rolls4 = QRadioButton('4', self) self.num_rolls4.move(60, 212) self.num_rolls5 = QRadioButton('5', self) self.num_rolls5.move(110, 212) self.radio_type_group = QButtonGroup(self) self.radio_type_group.addButton(self.words_radio_btn) self.radio_type_group.addButton(self.mixed_radio_btn) self.radio_type_group.addButton(self.numbers_radio_btn) self.radio_dice_group = QButtonGroup(self) self.radio_dice_group.addButton(self.num_dice4) self.radio_dice_group.addButton(self.num_dice5) self.radio_rolls_group = QButtonGroup(self) self.radio_rolls_group.addButton(self.num_rolls3) self.radio_rolls_group.addButton(self.num_rolls4) self.radio_rolls_group.addButton(self.num_rolls5) self.setGeometry(100, 100, 300, 400) self.setWindowTitle('Password Generator') self.setWindowIcon(QIcon('../images/lock_icon_bkgrd.png')) def _set_defaults(self): self.words_radio_btn.setChecked(True) self.num_dice5.setChecked(True) self.num_rolls5.setChecked(True) self.length_textline.setText('') def _run_generate(self): logging.info('[{0}]\n{1}'.format(utils.get_timestamp(), self._get_args())) return generate_secret(int(self._get_args()['number_rolls']), int(self._get_args()['number_dice']), int(self._get_args()['how_many']), str(self._get_args()['output_type']), int(self._get_args()['password_length'])) # def generate_secret(number_rolls: int = 5, number_dice: int = 5, # how_many: int = 1, output_type: str = 'words', # password_length: int = 20) # output_type=self._get_args()['output_type'], # password_length=int(self._get_args()['password_length']), # number_dice=int(self._get_args()['number_dice']), # number_rolls=int(self._get_args()['number_rolls']) def _on_click(self): self.textbox.setFontFamily("Courier New") return self.textbox.setText(self._run_generate()) def _get_args(self): args = {'password_length': 20, 'how_many': 1} # Type if self.numbers_radio_btn.isChecked(): args['output_type'] = self.numbers_radio_btn.text() elif self.mixed_radio_btn.isChecked(): args['output_type'] = self.mixed_radio_btn.text() else: args['output_type'] = self.words_radio_btn.text() # Length if self.length_textline.text(): args['password_length'] = self.length_textline.text() # Dice if self.num_dice4.isChecked(): args['number_dice'] = self.num_dice4.text() else: args['number_dice'] = self.num_dice5.text() # Rolls if self.num_rolls3.isChecked(): args['number_rolls'] = self.num_rolls3.text() elif self.num_rolls4.isChecked(): args['number_rolls'] = self.num_rolls4.text() else: args['number_rolls'] = self.num_rolls5.text() return args def _disabled_unused(self): tmp_text = self.length_textline.text() if tmp_text: self.length_textline.setText(tmp_text) else: self.length_textline.setText('20') self.radio_dice_group.setExclusive(False) self.radio_rolls_group.setExclusive(False) self.num_dice4.setChecked(False) self.num_dice4.setCheckable(False) self.num_dice4.setEnabled(False) self.num_dice5.setChecked(False) self.num_dice5.setCheckable(False) self.num_dice5.setEnabled(False) self.num_rolls3.setChecked(False) self.num_rolls3.setCheckable(False) self.num_rolls3.setEnabled(False) self.num_rolls4.setChecked(False) self.num_rolls4.setCheckable(False) self.num_rolls4.setEnabled(False) self.num_rolls5.setChecked(False) self.num_rolls5.setCheckable(False) self.num_rolls5.setEnabled(False) self.radio_dice_group.setExclusive(True) self.radio_rolls_group.setExclusive(True) def _set_word_defaults(self): self.length_textline.setText('') self.num_dice4.setCheckable(True) self.num_dice4.setEnabled(True) self.num_dice5.setCheckable(True) self.num_dice5.setEnabled(True) self.num_rolls3.setCheckable(True) self.num_rolls3.setEnabled(True) self.num_rolls4.setCheckable(True) self.num_rolls4.setEnabled(True) self.num_rolls5.setCheckable(True) self.num_rolls5.setEnabled(True) self.num_dice5.setChecked(True) self.num_rolls5.setChecked(True) def _copy_textbox(self): self.textbox.selectAll() self.textbox.copy() def _open_help(self): message = QMessageBox(self) with open('../assets/help/_main.txt', 'r') as help_text: message.setText(help_text.read()) message.setIcon(QMessageBox.Question) with open('../assets/help/_inform.txt', 'r') as help_inform: message.setInformativeText(help_inform.read()) message.setWindowTitle('PyPass3 Help') message.setStandardButtons(QMessageBox.Close) message.exec_()