from tkinter import filedialog typ = [('','*.csv')] dir = r'C:\work' csv_file_name = filedialog.askopenfilename(filetypes = typ , initialdir = dir) print(csv_file_name) import numpy as np data = np.loadtxt(csv_file_name, delimiter = ",", dtype = "unicode") H_Username = data[0][0] print(H_Username) H_Password = data[0][1] print(H_Password) H_AccesskeyID = data[0][2] print(H_AccesskeyID) H_Secretaccesskey = data[0][3] print(H_Secretaccesskey) H_Consoleloginlink = data[0][4] print(H_Consoleloginlink) B_Username = data[1][0] print(B_Username) B_Password = data[1][1] print(B_Password) B_AccesskeyID = data[1][2] print(B_AccesskeyID) B_Secretaccesskey = data[1][3] print(B_Secretaccesskey) B_Consoleloginlink = data[1][4] print(B_Consoleloginlink) import numpy as np list_rows = [[H_Username,H_Password,H_AccesskeyID,H_Secretaccesskey,H_Consoleloginlink], [B_Username,B_Password,B_AccesskeyID,B_Secretaccesskey,B_Consoleloginlink]] np.savetxt(csv_file_name, list_rows, delimiter =",",fmt ='%s')
PySimpleGUIのボタンの書き方に詳しいものが少なかったので自分なりにまとめた
最近、PySimpleGUIにハマってる。
だけど、どう書くか具体的に書いてあるものが少なかったので備忘としてまとめた。
かなりシンプルに書ける。
↓をコピペすれば動くはず。
あとは自分なりに工夫してください。
ここにないのはOKCancelくらいだけどYesNoと同じように書けるので省略。
import PySimpleGUI as sg sg.theme('LightGrey1') value = sg.PopupYesNo('実行しますか?YesかNoを選択してください。',title='Choice Yes or No') if value == 'Yes': sg.PopupTimed('なーにーなーにーなーにーなーにー',title='ポコポコ') sg.Popup('やっちまたなぁやっちまたなぁやっちまたなぁ',title='ポコポコ') sg.PopupCancel('そういえばこのひとたち最近テレビで観ないね',title='ピークを知る人たちなんだね') elif value == 'No': sg.PopupTimed('ヒロシです',title='ヒロシです') sg.Popup('ソロキャンプ動画面白いから観てね',title='ヒロシです') sg.PopupError('エラーが発生しました。titleを表示させるために意味のない文章を書いてみた',title='特に意味はない')
PySimpleGUIのテーマ一覧
PySimpleGUIのテーマ一覧を出力してみた
import PySimpleGUI as sg TL = sg.theme list()
'Black', 'BlueMono', 'BluePurple', 'BrightColors', 'BrownBlue', 'Dark', 'Dark2', 'DarkAmber', 'DarkBlack', 'DarkBlack1', 'DarkBlue', 'DarkBlue1', 'DarkBlue10', 'DarkBlue11', 'DarkBlue12', 'DarkBlue13', 'DarkBlue14', 'DarkBlue15', 'DarkBlue16', 'DarkBlue17', 'DarkBlue2', 'DarkBlue3', 'DarkBlue4', 'DarkBlue5', 'DarkBlue6', 'DarkBlue7', 'DarkBlue8', 'DarkBlue9', 'DarkBrown', 'DarkBrown1', 'DarkBrown2', 'DarkBrown3', 'DarkBrown4', 'DarkBrown5', 'DarkBrown6', 'DarkBrown7', 'DarkGreen', 'DarkGreen1', 'DarkGreen2', 'DarkGreen3', 'DarkGreen4', 'DarkGreen5', 'DarkGreen6', 'DarkGreen7', 'DarkGrey', 'DarkGrey1', 'DarkGrey10', 'DarkGrey11', 'DarkGrey12', 'DarkGrey13', 'DarkGrey14', 'DarkGrey2', 'DarkGrey3', 'DarkGrey4', 'DarkGrey5', 'DarkGrey6', 'DarkGrey7', 'DarkGrey8', 'DarkGrey9', 'DarkPurple', 'DarkPurple1', 'DarkPurple2', 'DarkPurple3', 'DarkPurple4', 'DarkPurple5', 'DarkPurple6', 'DarkPurple7', 'DarkRed', 'DarkRed1', 'DarkRed2', 'DarkTanBlue', 'DarkTeal', 'DarkTeal1', 'DarkTeal10', 'DarkTeal11', 'DarkTeal12', 'DarkTeal2', 'DarkTeal3', 'DarkTeal4', 'DarkTeal5', 'DarkTeal6', 'DarkTeal7', 'DarkTeal8', 'DarkTeal9', 'Default', 'Default1', 'DefaultNoMoreNagging', 'Green', 'GreenMono', 'GreenTan', 'HotDogStand', 'Kayak', 'LightBlue', 'LightBlue1', 'LightBlue2', 'LightBlue3', 'LightBlue4', 'LightBlue5', 'LightBlue6', 'LightBlue7', 'LightBrown', 'LightBrown1', 'LightBrown10', 'LightBrown11', 'LightBrown12', 'LightBrown13', 'LightBrown2', 'LightBrown3', 'LightBrown4', 'LightBrown5', 'LightBrown6', 'LightBrown7', 'LightBrown8', 'LightBrown9', 'LightGray1', 'LightGreen', 'LightGreen1', 'LightGreen10', 'LightGreen2', 'LightGreen3', 'LightGreen4', 'LightGreen5', 'LightGreen6', 'LightGreen7', 'LightGreen8', 'LightGreen9', 'LightGrey', 'LightGrey1', 'LightGrey2', 'LightGrey3', 'LightGrey4', 'LightGrey5', 'LightGrey6', 'LightPurple', 'LightTeal', 'LightYellow', 'Material1', 'Material2', 'NeutralBlue', 'Purple', 'Python', 'Reddit', 'Reds', 'SandyBeach', 'SystemDefault', 'SystemDefault1', 'SystemDefaultForReal', 'Tan', 'TanBlue', 'TealMono', 'Topanga'
すごい数あるから全部試すことはできない。
明るめのテーマに好きなものが多い
PySimpleGUIのOK Cancelボタンと動作の定義
import PySimpleGUI as sg #OKのときの処理を定義しておく def submit_func(): print ('OK_func') layout = [[sg.Submit(button_text='OK'), sg.Cancel()]] window = sg.Window('Sample', layout) while True: event, value = window.read() #例外処理とCanselのときの動作=break if event in [None, 'Cancel']: break #OKのときの動作=submit_func() elif event == 'OK': submit_func() window.close()
python PySimpleGUI if文
import PySimpleGUI as sg value = sg.popup_ok_cancel('実行しますか') while True: if value == 'OK': print('なーにー') break elif value =='Cancel': print('やっちまたなぁ') break else: break
Outputsを短縮記法の組み込み関数でJoinする
短縮記法でOutputsで!Refで取得した値同士を!Joinする方法がわからなかったので自分メモ
論理IDはご自身の環境に合わせて適当に変えてください。
Outputs: AZ: Value: !GetAtt EC2Linux.AvailabilityZone PrivateIp: Value: !GetAtt EC2Linux.PrivateIp PrivateDnsName: Value: !GetAtt EC2Linux.PrivateDnsName PublicDnsName: Value: !GetAtt EC2Linux.PublicDnsName PublicIp: Value: !GetAtt EC2Linux.PublicIp Plus: Value: !Join [ "-", [ !GetAtt EC2Linux.AvailabilityZone, !GetAtt EC2Linux.PublicIp ] ]
AWS EC2+RDSでWordpressを公開できる直前までのCloudFormationテンプレートを公開する
ドメイン登録とhttps化までやろうと思いましたが思ったより時間がないのでテンプレートの公開までにしておきます。
インストールページでRDSのエンドポイントを使います。
出力欄に表示されています。
出力されたIPに/wp-admin/install.phpでアクセスすればWordPressのインストール画面が表示されるはずです。
ドメイン登録とhttps化は時間があればいつかやるかもしれません。
RDSのエンドポイントを取得してmysqlコマンドと組み合わせて[mysql -h {endpoint}(←ここ) -u root -p] userdata内でRDSにログインできれば完璧なんですが日々勉強です。
AWSTemplateFormatVersion: 2010-09-09 Parameters: KeyPair: Type: AWS::EC2::KeyPair::KeyName LinuxLatestAmi: Type: AWS::SSM::Parameter::Value<String> Default: "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2" InstanceType: Type: String AllowedValues: ["t2.nano", "t2.micro", "t2.small", "t2.medium", "t2.large", "t2.xlarge", "t2.2xlarge"] Default: "t2.micro" Prefix: Type: String DBInstanceName: Type: String Default: "rds" MySQLMajorVersion: Type: String Default: "5.7" AllowedValues: [ "5.6", "5.7" , "8.0" ] MySQLMinorVersion: Type: String Default: "22" DBInstanceClass: Type: String AllowedValues: ["db.t2.micro", "db.t2.small", "db.t2.medium", "db.t2.large", "db.t2.xlarge", "db.t2.2xlarge", "db.t3.micro", "db.t3.small", "db.t3.medium", "db.t3.large", "db.t3.xlarge", "db.t3.2xlarge"] Default: "db.t2.micro" DBInstanceStorageSize: Type: String Default: "10" DBInstanceStorageType: Type: String Default: "gp2" DBName: Type: String Default: "wordpressdb" DBMasterUserName: Type: String Default: "root" MinLength: 1 MaxLength: 16 AllowedPattern: "[a-zA-Z][a-zA-Z0-9]*" ConstraintDescription: "must begin with a letter and contain only alphanumeric characters." DBPassword: Default: "rdspassword" NoEcho: true Type: String MinLength: 8 MaxLength: 41 AllowedPattern: "[a-zA-Z0-9]*" ConstraintDescription: "must contain only alphanumeric characters." MultiAZ: Default: "false" Type: String AllowedValues: [ "true", "false" ] VPCCIDR: Type: String Default: "10.0.0.0/16" PublicSubnetACIDR: Type: String Default: "10.0.1.0/24" PrivateSubnetACIDR: Type: String Default: "10.0.10.0/24" PrivateSubnetDCIDR: Type: String Default: "10.0.20.0/24" MainAvailabilityZone: Type: String AllowedValues: [ "ap-northeast-1a", "ap-northeast-1c" ,"ap-northeast-1d" ] Default: "ap-northeast-1a" ConstraintDescription: "EC2 Instance and RDS location" SubAvailabilityZone: Type: String AllowedValues: [ "ap-northeast-1a", "ap-northeast-1c" ,"ap-northeast-1d" ] Default: "ap-northeast-1d" ConstraintDescription: "Subnets that make up the DBSubnetGroup. Specify an MainAvailability Zone that is different from EC2 Instance." Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: !Sub ${VPCCIDR} EnableDnsSupport: true Tags: - Key: Name Value: !Sub "VPC-${Prefix}" InternetGateway: Type: AWS::EC2::InternetGateway Properties: Tags: - Key: Name Value: !Sub "InternetGateway-${Prefix}" AttachGateway: Type: AWS::EC2::VPCGatewayAttachment Properties: VpcId: !Ref VPC InternetGatewayId: !Ref InternetGateway Route: Type: AWS::EC2::Route Properties: RouteTableId: !Ref RouteTable DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref InternetGateway RouteTable: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref VPC Tags: - Key: Name Value: !Sub "RouteTable-${Prefix}" routeTableAssocName: Type: AWS::EC2::SubnetRouteTableAssociation Properties: SubnetId: !Ref PublicSubnetA RouteTableId: !Ref RouteTable PublicSubnetA: Type: AWS::EC2::Subnet Properties: AvailabilityZone: !Sub ${MainAvailabilityZone} VpcId: !Ref VPC CidrBlock: !Sub ${PublicSubnetACIDR} MapPublicIpOnLaunch: 'true' Tags: - Key: Name Value: !Sub "PublicSubnetA-${Prefix}" PrivateSubnetA: Type: AWS::EC2::Subnet Properties: AvailabilityZone: !Sub ${MainAvailabilityZone} VpcId: !Ref VPC CidrBlock: !Sub ${PrivateSubnetACIDR} MapPublicIpOnLaunch: 'false' Tags: - Key: Name Value: !Sub "PrivateSubnetA-${Prefix}" PrivateSubnetD: Type: AWS::EC2::Subnet Properties: AvailabilityZone: !Sub ${SubAvailabilityZone} VpcId: !Ref VPC CidrBlock: !Sub ${PrivateSubnetDCIDR} MapPublicIpOnLaunch: 'false' Tags: - Key: Name Value: !Sub "PrivateSubnetD-${Prefix}" EC2Linux: Type: AWS::EC2::Instance Properties: ImageId: !Ref LinuxLatestAmi AvailabilityZone: !Sub ${MainAvailabilityZone} InstanceType: !Ref InstanceType KeyName: !Ref KeyPair SubnetId: !Ref PublicSubnetA SecurityGroupIds: - !GetAtt SecurityGroupLinux.GroupId UserData: !Base64 | #!/bin/bash sudo yum -y update sudo yum -y install httpd sudo systemctl start httpd sudo systemctl enable httpd chkconfig httpd on sudo yum -y install mysql sudo amazon-linux-extras install php7.3 sudo yum -y install php-mbstring php-gd sudo systemctl restart httpd sudo timedatectl set-timezone Asia/Tokyo sudo localectl set-locale LANG=ja_JP.utf8 mkdir /home/wordpress cd /home/wordpress wget https://wordpress.org/latest.tar.gz tar xzvf latest.tar.gz mv wordpress/* /var/www/html chown apache.apache -R /var/www/html chmod +w -R /var/www/html Tags: - Key: Name Value: !Sub "EC2Linux-${Prefix}" eipName: Type: AWS::EC2::EIP Properties: Domain: vpc InstanceId: !Ref EC2Linux SecurityGroupLinux: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: SGlinux VpcId: !Ref VPC SecurityGroupIngress: - IpProtocol: tcp FromPort: '22' ToPort: '22' CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: '80' ToPort: '80' CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: '443' ToPort: '443' CidrIp: 0.0.0.0/0 Tags: - Key: Name Value: !Sub "SecurityGroupLinux-${Prefix}" rdsdbinstance: Type: AWS::RDS::DBInstance Properties: AllocatedStorage: !Sub ${DBInstanceStorageSize} AllowMajorVersionUpgrade: false AutoMinorVersionUpgrade: false AvailabilityZone: !Sub ${MainAvailabilityZone} BackupRetentionPeriod: 1 DBInstanceClass: !Sub ${DBInstanceClass} DBInstanceIdentifier: !Sub ${DBName} DBName: !Sub ${DBName} Engine: mysql EngineVersion: !Sub ${MySQLMajorVersion} MasterUsername: !Sub ${DBMasterUserName} MasterUserPassword: !Sub ${DBPassword} PubliclyAccessible: false StorageType: standard DBSubnetGroupName: !Ref DBSubnetGroup DBParameterGroupName: !Ref DBParameterGroup VPCSecurityGroups: - !Ref SecurityGroupRDS Tags: - Key: Name Value: !Sub "RDS-${Prefix}" SecurityGroupRDS: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: SGRDS VpcId: !Ref VPC SecurityGroupIngress: - IpProtocol: tcp FromPort: '3306' ToPort: '3306' SourceSecurityGroupId: !Ref SecurityGroupLinux Tags: - Key: Name Value: !Sub "SecurityGroupRDS-${Prefix}" DBSubnetGroup: Type: "AWS::RDS::DBSubnetGroup" Properties: DBSubnetGroupName: !Sub "rds-subnet-${Prefix}" DBSubnetGroupDescription: "-" SubnetIds: - !Ref 'PrivateSubnetA' - !Ref 'PrivateSubnetD' DBParameterGroup: Type: "AWS::RDS::DBParameterGroup" Properties: Family: !Sub "MySQL${MySQLMajorVersion}" Description: !Sub "rds-parm-${Prefix}" Outputs: DBInstanceEndpoint: Description: RDS Endpoint Address Value: !GetAtt rdsdbinstance.Endpoint.Address Export: Name: !Sub "endpoint" EIP: Description: Elastic IP Address Value: !Ref eipName Export: Name: !Sub "EIP" ReplicaJDBCConnectionString: Description: JDBC connection string for the replica database Value: !Join - '' - - 'http://' - !GetAtt - rdsdbinstance - Endpoint.Address